上面運行結果是 [49 50][51 50] 。 --> 結論: bytes.Buffer Reset之後,如果再寫入新的數據,如果數據的長度沒有超過Reset之前緩衝區的長度,那麼Buffer內部不會重新開闢記憶體,也就是說, 寫入的數據會覆蓋之前的數據。 在本例中,這裡【之前的數據】就是那個 b ...
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就不會被改寫了),可以自行試驗。