web-dev-qa-db-ja.com

golangの[] stringと... stringの違いは何ですか?

Go言語では、

[]stringは文字列配列です

また、...stringをパラメーターとして使用します。

違いはなんですか?

関数定義:

func f(args ...string) {}

この関数を次のように呼び出すことはできますか?

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

f(args)
75
user1746360

[]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

113
I Hate Lazy

どちらも文字列の配列を作成しますが、違いは呼び出し方法にあります。

func f(args ...string) {

}
// Would be called like this:

f("foo","bar","baz");

これにより、可変数の引数(すべて同じタイプ)を受け入れることができます

この良い例は、fmt.Printと友人です。これらは、必要な数の荷物を受け入れることができます。

13
tylerl

欲しいものは次のとおりです。

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

4
Ertuğrul

関数のパラメーターを簡素化します。次に例を示します( https://play.golang.org/p/euMuy6IvaM ):メソッドSampleEllipsisは、ゼロから同じタイプの多くのパラメーターを受け入れますが、メソッド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 : []
1
Petre Sosa