我点击了 https://blog.golang.org/gob 链接。并编写了一个示例,其中结构包含所有字符串数据。这是我的示例:package mainimport ( "bytes" "encoding/gob" "fmt" "log")type P struct { X string a string Name string}type Q struct { X string a string Name string}func main() { // Initialize the encoder and decoder. Normally enc and dec would be // bound to network connections and the encoder and decoder would // run in different processes. var network bytes.Buffer // Stand-in for a network connection enc := gob.NewEncoder(&network) // Will write to network. dec := gob.NewDecoder(&network) // Will read from network. // Encode (send) the value. err := enc.Encode(P{"My string", "Pythagoras","a string"}) if err != nil { log.Fatal("encode error:", err) } // Decode (receive) the value. var q Q err = dec.Decode(&q) if err != nil { log.Fatal("decode error:", err) } fmt.Println(q.X,q.Name) fmt.Println(q.a)}玩戈朗:https://play.golang.org/p/3aj0hBG7wMj预期输出:My string a stringPythagoras实际输出My string a string我不知道为什么输出中缺少“毕达哥拉斯”字符串。当我有多个字符串,结构中的整数数据并使用gob处理时,我观察到类似的行为。如何处理字符串?我的程序中存在什么问题?
4 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
您的字段未导出(名称以小写字母开头)。Go 的反射,以及 JSON、YAML 和 gob 等扩展的编组程序,无法访问未导出的结构字段,只能访问导出的结构字段。a
明月笑刀无情
TA贡献1828条经验 获得超4个赞
gob 编解码器忽略未导出的字段。通过将字段名称中的第一个字母大写来导出字段:
type P struct {
X string
A string
Name string
}
对类型 进行类似的更改。Q
紫衣仙女
TA贡献1839条经验 获得超15个赞
使您的字段处于结构化和公共状态。然后它将被编码和解码。aPQ
type P struct {
X string
A string
Name string
}
type Q struct {
X string
A string
Name string
}
收到一只叮咚
TA贡献1821条经验 获得超4个赞
必须导出为名称赋值的字段。"Pythagoras"
type P struct {
X string
a string // --> change name to A
Name string
}
type Q struct {
X string
a string // --> change name to A
Name string
}
在您链接的博客文章中,记录了它(Ctrl+F 表示“导出”):
仅对导出的字段进行编码和解码。
- 4 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消