golang中[] string和... string之间的区别是什么?

use*_*360 79 string go

用Go语言

[]string 是字符串数组

我们也...string用作参数

有什么区别?

功能定义:

func f(args ...string) {}
Run Code Online (Sandbox Code Playgroud)

我可以像下面这样调用这个函数吗?

args := []string{"a", "b"}

f(args)
Run Code Online (Sandbox Code Playgroud)

I H*_*azy 116

[]string 是字符串数组

从技术上讲,它是一个引用底层数组的切片

我们也...string用作参数

有什么区别?

关于结构,没什么.两种语法产生的数据类型是相同的.

...参数语法形成了可变参数的参数.它将接受零个或多个string参数,并将它们作为切片引用.

关于调用f,您可以使用以下语法将一片字符串传递给variadic参数:

func f(args ...string) {
    fmt.Println(len(args))
}


args := []string{"a", "b"}

f(args...)
Run Code Online (Sandbox Code Playgroud)

此语法可用于使用文字语法构建的切片,或表示可变参数的切片(因为它们之间实际上没有区别).

http://play.golang.org/p/QWmzgIWpF8

  • `[] string`是一个切片,而不是一个数组.数组和切片之间的差异很微妙但很重要. (9认同)

tyl*_*erl 13

两者都创建了一个字符串数组,但不同之处在于它的调用方式.

func f(args ...string) {

}
// Would be called like this:

f("foo","bar","baz");
Run Code Online (Sandbox Code Playgroud)

这允许您接受可变数量的参数(所有相同的类型)

这方面的一个很好的例子就是fmt.Print和朋友们一样,他们可以接受你想要的少量或多少的东西.


小智 5

这是您想要的:

var args []string = []string{"A", "B", "C"}

func Sample(args ...string) {
    for _, arg := range args {
        fmt.Println(arg)
    }
}

func main() {
    Sample(args...)
}
Run Code Online (Sandbox Code Playgroud)

播放:http//play.golang.org/p/N1ciDUKfG1