【发布时间】:2021-09-04 08:20:33
【问题描述】:
我已经熟悉如何在 Go 中对数组/切片进行切片和切块(实际任务是检查字节切片中的前 N 个字节是否是一组特定字节)。
所以我学会了如何将切片中的字节复制到数组中:
var dstArray [1]byte
srcSlice := []byte{0x00}
copy(dstArray[:], srcSlice)
让我感到困惑的是,在copy 调用中,必须在dstArray 的末尾写上[:]。如果我忽略了这个错误:
first argument to copy should be slice; have [1]byte
首先,为什么说“应该切片”?我提供了一个数组,它工作得很好(使用[:] 位)。
而且,主要问题是:为什么它需要[:] 位?在这种情况下,它的意义是什么?如果我们省略它,指令会被误解吗?为什么要把语法复杂化?
【问题讨论】:
-
"数组工作得很好(使用 [:] 位)` - 使数组成为切片的是“[:] 位”。这回答了您的两个问题。
-
@SergioTulentsev 那为什么它说“应该”而不是“必须”?喜欢它更喜欢它是一个切片,但也可以带一个数组或其他东西?
-
写错误信息的人选择了错误的词。