Go:将字节读入数组

时间:2014-11-22 01:38:19

标签: go

我正在尝试以下列方式将字节附加到数组:

开始

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]]

为什么它只打印出发送的最后一个字节?我错过了什么吗?

1 个答案:

答案 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)
}