在Go语言中,
[]string 是一个字符串数组
[]string
我们还使用 ...string 作为参数 .
...string
有什么不同?
功能定义:
func f(args ...string) {}
我可以像下面这样调用这个函数吗?
args := []string{"a", "b"} f(args)
[] string是一个字符串数组
从技术上讲,它是一个引用底层数组的切片
我们还使用... string作为参数 . 有什么不同?
关于结构,没什么 . 两种语法产生的数据类型是相同的 .
... 参数语法生成可变参数 . 它将接受零个或多个 string 参数,并将它们作为切片引用 .
...
string
关于调用 f ,您可以使用以下语法将一片字符串传递给variadic参数:
f
func f(args ...string) { fmt.Println(len(args)) } args := []string{"a", "b"} f(args...)
此语法可用于使用文字语法构建的切片,或表示可变参数的切片(因为它们之间实际上没有区别) .
http://play.golang.org/p/QWmzgIWpF8
两者都创建了一个字符串数组,但不同之处在于它的调用方式 .
func f(args ...string) { } // Would be called like this: f("foo","bar","baz");
这允许您接受可变数量的参数(所有相同的类型)
一个很好的例子是 fmt.Print 和朋友,他们可以接受你想要的少量或多少的礼物 .
fmt.Print
这是你想要的:
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
它简化了您的功能参数 . 下面是一个示例(https://play.golang.org/p/euMuy6IvaM):方法SampleEllipsis接受从0到多个相同类型的参数,但在SampleArray方法中,必须声明 args .
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 : [A B C] Sample ellipsis : [A B C] Sample ellipsis : [] Sample array Sample ellipsis : [A B C] Sample array Sample ellipsis : []
4 回答
从技术上讲,它是一个引用底层数组的切片
关于结构,没什么 . 两种语法产生的数据类型是相同的 .
...
参数语法生成可变参数 . 它将接受零个或多个string
参数,并将它们作为切片引用 .关于调用
f
,您可以使用以下语法将一片字符串传递给variadic参数:此语法可用于使用文字语法构建的切片,或表示可变参数的切片(因为它们之间实际上没有区别) .
http://play.golang.org/p/QWmzgIWpF8
两者都创建了一个字符串数组,但不同之处在于它的调用方式 .
这允许您接受可变数量的参数(所有相同的类型)
一个很好的例子是
fmt.Print
和朋友,他们可以接受你想要的少量或多少的礼物 .这是你想要的:
玩:http://play.golang.org/p/N1ciDUKfG1
它简化了您的功能参数 . 下面是一个示例(https://play.golang.org/p/euMuy6IvaM):方法SampleEllipsis接受从0到多个相同类型的参数,但在SampleArray方法中,必须声明 args .
退货: