這是問題的代碼。比較這兩種緩沖區型別表明它們不相等,但兩個 *File 型別是相等的。
func main() {
var v, w io.Writer
v := &bytes.Buffer{}
w := &bytes.Buffer{}
v.Write([]byte("Hello"))
w.Write([]byte("Hello"))
fmt.Println(v == w) // false
v := os.Stdout
w := os.Stdout
v.Write([]byte("Hello"))
w.Write([]byte("Hello"))
fmt.Println(v == w) // true
}
uj5u.com熱心網友回復:
您正在比較指標,而不是物件。該運算式&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!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409645.html
標籤:
上一篇:連接到SSH服務器
