Go中的切片存储参考

时间:2012-12-04 20:45:19

标签: go

在Go库源中,您经常会看到通过创建新的切片存储引用来传递切片,如此

method(s[:])

与传递原始切片相比,这有什么好处?

method(s)

2 个答案:

答案 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是完全不同的类型。