编码/json 不包括未导出的字段是否有技术原因?如果没有,这是任何决定。即使没有导出,是否还有其他后门选项(如 )可以包括在内? ; z9 V" B: q6 g: b2 ?5 O不幸的是,需要导出客户端代码才能获得此功能,特别是如果小写字母提供包装或组装结构的决定比设计它们晚得多。& z. g2 i1 m% S. a* T
人们如何处理这个问题?只是出口一切?9 D3 A- v8 C( O$ z
此外,不导出字段名称会使遵循建议的习语变得困难。我认为如果结构 X 有字段 Y,你不能有访问器方法Y()Y 接口访问,你必须是 getter 想出一个新名字,不管你得到什么,根据http://golang.org/doc/effective_go.html#Getters,你会得到一些不常用的东西7 B) }2 }' a) t8 n( Q, S5 u( n
0 u1 |2 \& a4 E) P2 {; |解决方案: $ ^; O% u3 ]) C; L8 s 有技术原因。json 库无权使用反射来检查字段,除非它们被导出。一个包只能检查包中类型的未导出字段* l9 Z6 v6 \8 ~. ?# {8 g k Z
为了解决你的问题,你所能做的就是用导出字段来制作未导出的类型。如果没有问题地传递给 Json,它将解组成未导出的类型,但不会出现在 API 文档。然后,您可以创建嵌入式未导出类型的导出类型。这种导出类型需要实现json.Marshaler和json.Unmarshaler接口。( R% R8 O7 p @
注意:所有代码都未经测试,甚至可能无法编译。) _0 `! [ K1 L$ B! T! W- G