传递整个切片范围作为参数

时间:2017-08-03 14:15:24

标签: go

考虑到下面的代码,我看到一些代码使用这种格式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)
}

2 个答案:

答案 0 :(得分:3)

v是切片时,vv[:]之间没有区别。当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}是一个切片,因此此处的数组不在此处。