我在Go中有一个函数,我希望使用gob编码的返回值。返回值是结构指针。然而,即使我确实了解导出的变量是什么,我也不太确定如何使其工作。
这就是我的功能
fun loadXYZ(root *structABC) *structABC{
const once = "stateData.bin"
rd, errr := ioutil.ReadFile(once)
if errr!=nil{
//Do some computation and store in "root"
buf := &bytes.Buffer{}
errr = gob.NewEncoder(buf).Encode(root)
if errr != nil {
panic(errr)
}
errr = ioutil.WriteFile(once, buf.Bytes(), 0666)
if errr != nil {
panic(errr)
}
return root
}
var d *structABC
errr = gob.NewDecoder(bytes.NewReader(rd)).Decode(&d)
if errr != nil {
panic(errr)
}
return d
}
这是我得到的错误
panic: gob: type main.stateNode has no exported fields
我知道错误发生的原因。但有人可以帮我解决吗?
答案 0 :(得分:8)
在go中,以大写字母开头的字段和变量是“已导出”,并且对其他包可见。以小写字母开头的字段是“未导出的”,只能在自己的包中显示。
encoding / gob包依赖于反射来编码值,并且只能看到导出的结构域。
为了使事物可编码,请将stateNode
结构中每个字段名称的第一个字母大写,以便保存。
答案 1 :(得分:5)
导出字段这是一个名称以大写字母开头的字段,如:
type stateNode struct {
ImExported string // Exported
butImNot string // unexported
}