方括号在表示复制目标数组时的意义是什么?
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)]
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
我已经熟悉如何在 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)]
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