func t() { a := []byte{'1', '2'} buf := new(bytes.Buffer) buf.Write(a) b := buf.Bytes() fmt.Println(b) buf.Reset() c := []byte{'3'} buf.Write(c) fmt.Println(b) }
上面運行結果是
[49 50]
[51 50]
。
--> 結論:
bytes.Buffer Reset之后,如果再寫入新的數據,如果數據的長度沒有超過Reset之前緩沖區的長度,那么Buffer內部不會重新開辟內存,也就是說,
寫入的數據會覆蓋之前的數據。
在本例中,這里【之前的數據】就是那個 b , 很明顯它的第一個字節已經被修改了。
--> 如果你寫入的數據長度超過前面的長度,那么就不會這樣了(b就不會被改寫了),可以自行試驗。