gpt4 book ai didi

JSON 和处理未导出的字段

转载 作者:IT老高 更新时间:2023-10-28 12:44:20 24 4
gpt4 key购买 nike

encoding/json 不包含未导出的字段是否有技术原因?如果不是,并且这是一个任意决定,即使未导出,是否还有一个额外的后门选项(比如“+”)要包括在内?

要求导出客户端代码以获取此功能感觉很不幸,特别是如果小写提供封装或编码结构的决定比它们的设计晚得多。

人们如何处理这个问题?只导出所有内容?

此外,导出字段名称不会使遵循建议的习语变得困难。我认为如果结构 X 具有字段 Y,则不能有访问器方法 Y()。如果您想提供对 Y 的接口(interface)访问,您必须为 getter 取一个新名称,并且根据 http://golang.org/doc/effective_go.html#Getters 无论如何您都会得到一些不惯用的东西。

最佳答案

有技术原因。 json 库无权使用反射查看字段,除非它们被导出。包只能查看自己包中未导出的类型字段

为了解决您的问题,您可以做的是使用导出的字段创建一个未导出的类型。如果传递给它没有问题,Json 将解码为未导出的类型,但它不会出现在 API 文档中。然后,您可以制作一个嵌入未导出类型的导出类型。然后,此导出的类型需要实现 json.Marshalerjson.Unmarshaler 接口(interface)的方法。

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

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
}

关于JSON 和处理未导出的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com