gpt4 book ai didi

go - Go 语言中导出和未导出的字段

转载 作者:IT王子 更新时间:2023-10-29 01:16:29 26 4
gpt4 key购买 nike

我在 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

我知道错误发生的原因。但是有人可以帮我解决吗?

最佳答案

在 go 中,以大写字母开头的字段和变量是“导出的”,并且对其他包可见。以小写字母开头的字段是“未导出的”,并且仅在它们自己的包内可见。

encoding/gob 包依赖于反射来编码值,并且只能看到exported struct 字段。

为了使内容可编码,请将要保存的 stateNode 结构中每个字段名称的首字母大写。

关于go - Go 语言中导出和未导出的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40256161/

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