为了账号安全,请及时绑定邮箱和手机立即绑定

为什么把两个不同的对象解码成同一个对象,但是bool成员没有变?

为什么把两个不同的对象解码成同一个对象,但是bool成员没有变?

Go
子衿沉夜 2023-06-19 15:41:32
我正在使用 go 的 encoding/gob 将类型为 T 的两个不同对象解码为同一个对象,但是对象的 bool 成员在第二次解码后没有改变。为什么?package mainimport (    "fmt"    "encoding/gob"    "bytes")type T struct {    X int    Y string    Z bool}func main() {    t := T{}    buf := new(bytes.Buffer)    enc := gob.NewEncoder(buf)    dec := gob.NewDecoder(buf)    t1 := T{1, "1", true}    enc.Encode(t1)    dec.Decode(&t)    fmt.Printf("%+v\n", t)    // If t is a new entity, the second decode into t can product expected result: {X:2 Y:2 Z:false}    // otherwise, t's bool member has not been changed after the second decode.    // t = T{}    t2 := T{2, "2", false}    enc.Encode(t2)    dec.Decode(&t)    fmt.Printf("%+v\n", t)    // result:    // {X:1 Y:1 Z:true}    // {X:2 Y:2 Z:true}}
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

如果一个字段的类型为零值(数组除外;见上文),它会从传输中被忽略。

而“false”是零值。如果您尝试设置t2.X = 0它会显示相同的行为。


查看完整回答
反对 回复 2023-06-19
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

意外行为来自重用内存而不清理它。您正在重复使用 t 和 b 两次,这会使您面临许多可能的错误。这是 t 产生你的问题,但它也可能是 b 。


查看完整回答
反对 回复 2023-06-19
  • 2 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信