在Go库源中,您经常会看到通过创建新的切片存储引用来传递切片,如此
method(s[:])
与传递原始切片相比,这有什么好处?
method(s)
答案 0 :(得分:7)
s[:]
构造通常仅用于创建引用现有数组的新切片,而不是“传递原始切片”。
如果s[:]
确实在stdlib的某个地方使用,s
是一个切片而不是例如重构剩余的。如果您在Go issue tracker上知道,请报告此类地点。
答案 1 :(得分:1)
您将看到这样的代码的唯一情况是,当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是完全不同的类型。