5

在 Go 库源代码中,您经常看到通过创建新的切片存储引用来传递切片,如下所示

method(s[:])

与仅通过原始切片相比,这样做有什么好处?

method(s)
4

2 回答 2

7

s[:]构造通常仅用于创建引用现有数组的新切片,而不用于“传递原始切片”。

如果s[:]真的在标准库中的某个地方使用并且s是一个切片,那么它可能是一个重构的剩余部分。如果您在 Go问题跟踪器上知道,请报告此类地点。

于 2012-12-04T20:49:29.807 回答
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 是完全不同的类型。

于 2012-12-16T06:48:19.063 回答