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的切片,也可用于表示可变参数的切片(因为它们之间确实没有区别) 。
两者都创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 : []