在 Go 库源代码中,您经常看到通过创建新的切片存储引用来传递切片,如下所示
method(s[:])
与仅通过原始切片相比,这样做有什么好处?
method(s)
该s[:]
构造通常仅用于创建引用现有数组的新切片,而不用于“传递原始切片”。
如果s[:]
真的在标准库中的某个地方使用并且s
是一个切片,那么它可能是一个重构的剩余部分。如果您在 Go问题跟踪器上知道,请报告此类地点。
您会看到这样的代码的唯一情况是 s 是一个数组,并且您希望将其作为参数传递给将切片作为其输入的函数。采取以下代码。
package main
func main() {
x := [...]int{1, 2, 3, 4, 5}
someFunction(x) // type mismatch error : expecting [] int, passed [5] int
someFunction(x[:])// no error
}
func someFunction(input []int){
// use input
}
这里要注意的是 [] int 和 [5] int 是完全不同的类型。