Go-lang:如何将切片转换为固定大小的数组?

thi*_* gg 21 arrays go slice

我想从切片转换固定大小的数组:

func gen(bricks []Brick) {
    if len(bricks) == 16 {
        if check(Sculpture{bricks}) {
            var b [16]Brick = bricks[0:16];
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

但这会导致:

 cannot use bricks[0:16] (type []Brick) as type [16]Brick in assignment
Run Code Online (Sandbox Code Playgroud)

如何将切片转换为固定大小的数组?

inf*_*inf 53

你需要使用copy:

slice := []byte("abcdefgh")

var arr [4]byte

copy(arr[:], slice[:4])

fmt.Println(arr)
Run Code Online (Sandbox Code Playgroud)

正如Aedolon所说,你也可以使用

copy(arr[:], slice)
Run Code Online (Sandbox Code Playgroud)

因为副本将始终只复制最小值len(src)len(dst)字节.

  • 这是正确的,但是一个小的补充:你不需要`copy(arr [:],slice [:4])`,`copy(arr [:],slice)`就足够了.`copy`自动将自己限制在给定切片中较小的一个. (5认同)