我正在尝试以下列方式将字节附加到数组:
开始
func readBytes() {
b := make([]byte, 1)
a := [][]byte{}
for i := 0, i < 4, i++ {
conn.Read(b)
a = append(a, b)
fmt.Println(b)
}
fmt.Println(a)
}
来自fmt.Println(b)的结果:
[2]
[5]
[5]
[3]
来自fmt.Println(a)的结果:
[[3], [3], [3], [3]]
为什么它只打印出发送的最后一个字节?我错过了什么吗?
答案 0 :(得分:1)
b
是一个切片 - 因此,每次将其传递给conn.Read
时,您都会更新相同的基础数组。你可以look at this Golang blog post to understand how this works。
调用fmt.Println(a)
后,每个切片都在查看相同的底层数组。
您可以通过在循环中实例化缓冲区b
或使用数组而不是切片来解决此问题。
这是一个在循环中重新分配b
切片的工作示例:http://play.golang.org/p/cN1BE8WSFE
它本质上是(带有int
切片):
for i := 0; i < 5; i++ {
b = []int{i, i + 1, i + 2, i + 3, i + 4}
a = append(a, b)
}