首页 文章

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

提问于
浏览
71

在Go语言中,

[]string 是一个字符串数组

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

有什么不同?

功能定义:

func f(args ...string) {}

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

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

f(args)

4 回答

  • 0

    [] string是一个字符串数组

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

    我们还使用... string作为参数 . 有什么不同?

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

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

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

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

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

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

  • 108

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

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

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

    一个很好的例子是 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...)
    }
    

    玩:http://play.golang.org/p/N1ciDUKfG1

  • 13

    它简化了您的功能参数 . 下面是一个示例(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 : []
    

相关问题