1 回答

TA貢獻1874條經驗 獲得超12個贊
您正在比較指針,而不是對象。該表達式&bytes.Buffer{}在內存中創建一個新對象并返回一個指向它的指針。這樣做兩次會給出兩個不同的指針,因為沒有兩個對象可以駐留在同一個內存位置。
要比較緩沖區的實際內容,請使用類似bytes.Compare(v.Bytes(), w.Bytes())
v := &bytes.Buffer{}
w := &bytes.Buffer{}
v.Write([]byte("Hello"))
w.Write([]byte("Hello"))
fmt.Printf("%p, %p\n", v, w) // prints 2 different values
fmt.Println(bytes.Compare(v.Bytes(), w.Bytes())) // 0, means "equal"
關于第二種情況,os.Stdout是一個包含指向 的指針的全局變量os.File,因此該片段比較了指向同一個對象的兩個指針。
v := os.Stdout
w := os.Stdout
v.Write([]byte("Hello"))
w.Write([]byte("Blah!")) // doesn't matter
fmt.Println(v == w) // true: v and w point to the same object!
- 1 回答
- 0 關注
- 116 瀏覽
添加回答
舉報