Golang JSON解码返回空值,求解析代码解码失败的原因
为什么你的Golang JSON解码后返回空值?
嘿,这问题我见得太多了——核心原因就是结构体字段的可见性!
Go语言里,只有首字母大写的标识符(也就是「导出字段」)才能被外部包访问。而你用的encoding/json包属于外部包,根本看不到那些小写开头的字段,自然没法把JSON里的值映射到你的Config结构体里,解码后自然全是空值。
修复方案:把结构体字段改成首字母大写
只需要把所有需要被JSON解码的字段(包括嵌套结构体里的字段)的首字母改成大写,同时保留原来的json标签(标签是用来对应JSON里的键名的,不用改)。修改后的Config结构体应该是这样:
type Config struct { MongoConnectionString string `json:"database"` Elastic struct{ Main string `json:"main"` Log string `json:"log"` } `json:"elastic"` LogFilePath string `json:"logfile"` }
补充说明
如果你的需求是不想让这些字段在包外被直接修改,但又要支持JSON解码,那可以通过自定义UnmarshalJSON方法来实现,但对于大多数常规场景来说,直接导出字段是最简单、最符合Go idiom的做法。
修改完之后再运行你的代码,就能正确解析config.json里的内容啦!
内容的提问来源于stack exchange,提问作者wolter
相关产品推荐
相关产品推荐

