我在一些代码中找到了这个:
h := s.Hash(tx)
sig, err := crypto.Sign(h[:], prv)
什么[:]
意思 如果这是数组的完整片段,为什么不通过数组本身呢?我想知道这是什么编码风格?
在使用中,数组和切片稍有不同,不能互换使用。但是,您可以使用[:]
运算符轻松地从数组中切片。
本文详细解释了- 切片:用法和内部。
另请参阅Go编程语言规范的“ 切片表达式”部分。
简而言之,[:]
运算符允许您从数组创建切片,可以选择使用开始和结束范围。例如:
a := [3]int{1, 2, 3, 4} // "a" has type [4]int (array of 4 ints)
x := a[:] // "x" has type []int (slice of ints) and length 4
y := a[:2] // "y" has type []int, length 2, values {1, 2}
z := a[2:] // "z" has type []int, length 2, values {3, 4}
m := a[1:3] // "m" has type []int, length 2, values {2, 3}
可能造成这种区别的原因是为了增加类型安全性。也就是说,长度是数组类型的形式部分(例如[4]int
,四个整数的数组,而不同的大小是不同的类型),而切片可以具有任何长度,包括零。因此,如果您想确保已知长度序列的安全性,则可以使用数组,否则为方便起见请使用切片。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句