加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang json和处理未导出的字段

发布时间:2020-12-16 09:44:24 所属栏目:大数据 来源:网络整理
导读:有没有技术原因为什么未导出的字段不包括编码/ json?如果不是,这是一个任意的决定,可以有一个额外的后门选项(说“)包括即使未报告? 要求客户端代码导出以获得此功能感到不幸,特别是如果小写提供封装或决定元帅结构比设计更晚的时候。 人们如何处理这个
有没有技术原因为什么未导出的字段不包括编码/ json?如果不是,这是一个任意的决定,可以有一个额外的后门选项(说“)包括即使未报告?

要求客户端代码导出以获得此功能感到不幸,特别是如果小写提供封装或决定元帅结构比设计更晚的时候。

人们如何处理这个?只是导出一切?

此外,不导出字段名称使其难以遵循建议的成语。我认为如果一个结构X有字段Y,你不能有一个访问器方法Y()。如果你想提供接口访问Y,你必须拿出一个新的名字为getter,无论你会得到什么不成语根据http://golang.org/doc/effective_go.html#Getters

有一个技术原因。 json库没有权力使用reflect来查看字段,除非它们被导出。包只能查看自己包中类型的未导出字段

为了处理你的问题,你可以做一个具有导出字段的未导出类型。如果传递给它没有问题,Json将解组成一个未导出的类型,但不会显示在API文档中。然后,您可以创建嵌入未导出类型的导出类型。这个导出的类型将需要实现json.Marshaler和json.Unmarshaler接口的方法。

注意:所有代码未经测试,甚至可能不编译。

type jsonData struct {
    Field1 string
    Field2 string
}

type JsonData struct {
    jsonData
}

// Implement json.Unmarshaller
func (d *JsonData) UnmarshalJSON(b []byte) error {
    return json.Unmarshal(b,&d.jsonData)
}

// Getter
func (d *JsonData) Field1() string {
    return d.jsonData.Field1
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读