方括号在表示复制目标数组时的意义是什么?

What is the significance of square brackets in denoting the copy destination array?

我已经熟悉如何在 Go 中切片和切块 arrays/slices(实际任务是检查字节切片中的前 N ​​个字节是否是一组特定字节)。

所以我学会了如何将字节从切片复制到数组中:

var dstArray [1]byte
srcSlice := []byte{0x00}
copy(dstArray[:], srcSlice)

令我困惑的是在 copy 调用中 dstArray 末尾写 [:] 的必要性。如果我忽略了这个错误:

first argument to copy should be slice; have [1]byte

首先,为什么说“应该是slice”?我提供了一个数组,它工作得很好(使用 [:] 位)。

而且,主要问题是:为什么它需要 [:] 位?在这种情况下它的意义是什么?如果我们忽略它,指令是否会以某种方式被误解?为什么要使语法复杂化?

[:]是切片表达式的shorthand。

根据规范:

For convenience, any of the indices may be omitted. A missing low index defaults to zero; a missing high index defaults to the length of the sliced operand:

a[2:]  // same as a[2 : len(a)]
a[:3] // same as a[0 : 3]
a[:]  // same as a[0 : len(a)]

另请参阅:https://golang.org/ref/spec#Slice_expressions

First of all, why does it say "should be slice"?

因为函数的API是这样定义的,go是强类型语言,所以你应该提供所需类型的值。

I provide an array instead and it works just fine (with the [:] bit).

您不提供数组,您获取一个数组并使用 [:] https://play.golang.org/p/TEih17eVWml

将其转换为切片

why does it require the [:] bit?

这就是如何从数组中获取切片以符合副本 API