golang中的string和string有什么区别?

在Go语言中

[]string是string数组

我们也使用...string作为参数

有什么区别?

function定义:

 func f(args ...string) {} 

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

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

[]string是string数组

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

我们也使用...string作为参数

有什么区别?

关于结构,没有什么是真的。 由这两种语法产生的数据types是相同的。

参数语法使可变参数。 它将接受零个或多个string参数,并将它们作为切片引用。

关于调用f ,可以使用以下语法将一部分string传递给variadic参数:

 func f(args ...string) { fmt.Println(len(args)) } args := []string{"a", "b"} f(args...) 

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

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

两者都创build一个string数组,但区别在于它是如何被调用的。

 func f(args ...string) { } // Would be called like this: f("foo","bar","baz"); 

这允许您接受可变数目的参数(全部是相同的types)

一个很好的例子就是fmt.Print和朋友,他们可以接受尽可能less或者更多的援助。

这是你想要的:

 var args []string = []string{"A", "B", "C"} func Sample(args ...string) { for _, arg := range args { fmt.Println(arg) } } func main() { Sample(args...) } 

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

它简化了你的function参数。 下面是一个示例( https://play.golang.org/p/euMuy6IvaM ):方法SampleEllipsis从零接受许多相同types的参数,但是在方法SampleArray中,它是要声明的强制参数

 package main import "fmt" func SampleEllipsis(args ...string) { fmt.Printf("Sample ellipsis : %+v\n",args) } func SampleArray(args []string) { fmt.Println("Sample array ") SampleEllipsis(args...) } func main() { // Method one SampleEllipsis([]string{"A", "B", "C"}...) // Method two SampleEllipsis("A", "B", "C") // Method three SampleEllipsis() // Simple array SampleArray([]string{"A", "B", "C"}) // Simple array SampleArray([]string{}) } 

返回:

 Sample ellipsis : [ABC] Sample ellipsis : [ABC] Sample ellipsis : [] Sample array Sample ellipsis : [ABC] Sample array Sample ellipsis : []