亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么把兩個不同的對象解碼成同一個對象,但是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 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號