93

Go言語では、

[]string文字列配列です

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

違いはなんですか?

関数の定義:

func f(args ...string) {}

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

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

f(args)
4

4 に答える 4

135

[]string文字列配列です

技術的には、基になる配列を参照するスライスです

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

違いはなんですか?

構造に関しては、実際には何もありません。両方の構文から得られるデータ型は同じです。

...パラメータ構文は可変個引数パラメータを作成します。0個以上のstring引数を受け入れ、それらをスライスとして参照します。

の呼び出しに関してfは、次の構文を使用して文字列のスライスを可変個引数パラメーターに渡すことができます。

func f(args ...string) {
    fmt.Println(len(args))
}


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

f(args...)

この構文は、リテラル構文を使用して作成されたスライス、または可変個引数パラメーターを表すスライスのいずれかで使用できます(実際にはそれらの間に違いはないため)

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

于 2012-10-16T04:54:04.327 に答える
15

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

func f(args ...string) {

}
// Would be called like this:

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

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

この良い例はfmt.Print、友達です。これは、必要な数のアルグメントを受け入れることができます。

于 2012-10-16T04:51:00.167 に答える
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

于 2015-11-19T20:43:19.177 に答える
1

それはあなたの関数パラメータを単純化します。次に例を示します(https://play.golang.org/p/euMuy6IvaM):メソッドSampleEllipsisは、ゼロから同じタイプの多くのパラメーターを受け入れますが、メソッド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 : [A B C]
Sample ellipsis : [A B C]
Sample ellipsis : []
Sample array 
Sample ellipsis : [A B C]
Sample array 
Sample ellipsis : []
于 2016-11-28T12:36:04.073 に答える