Go中的[:]符号是什么意思?

Nulik:

我在一些代码中找到了这个:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章