考虑到下面的代码,我看到一些代码使用这种格式v[:]
来传递整个切片(不是它的一部分)作为参数。
v[:]
和v
之间有什么区别吗?或者它只是一个开发者偏好?
我在下面做的测试表明我没有区别。我错过了什么吗?
package main
import (
"fmt"
)
func main() {
v := []byte {1, 2, 3}
printSliceInfo(v)
printSliceInfo(v[:])
}
func printSliceInfo(s []byte) {
fmt.Printf("Len: %v - Cap: %v - %v\n", len(s), cap(s), s)
}
答案 0 :(得分:3)
当v
是切片时,v
和v[:]
之间没有区别。当v
是数组时,v[:]
是覆盖整个数组的切片。
答案 1 :(得分:-1)
有区别。您可能需要阅读Slice Expression in the Golang spec
a[:] // same as a[0 : len(a)]
v[:]
实际上是一个新切片值(那就是你有两个切片 - v& v [:]),所以你需要先考虑为什么你真的需要它这样做。在您阅读了一些切片之后,可以帮助您理解这些差异:https://play.golang.org/p/cJgfYGS78H
p.s。:您在上面定义的v := []byte {1, 2, 3}
是一个切片,因此此处的数组不在此处。