Go言語では、
[]string
文字列配列です
また、パラメータとしても使用...string
します。
違いはなんですか?
関数の定義:
func f(args ...string) {}
この関数を次のように呼び出すことはできますか?
args := []string{"a", "b"}
f(args)
[]string
文字列配列です
技術的には、基になる配列を参照するスライスです
また、パラメータとしても使用
...string
します。違いはなんですか?
構造に関しては、実際には何もありません。両方の構文から得られるデータ型は同じです。
...
パラメータ構文は可変個引数パラメータを作成します。0個以上のstring
引数を受け入れ、それらをスライスとして参照します。
の呼び出しに関してf
は、次の構文を使用して文字列のスライスを可変個引数パラメーターに渡すことができます。
func f(args ...string) {
fmt.Println(len(args))
}
args := []string{"a", "b"}
f(args...)
この構文は、リテラル構文を使用して作成されたスライス、または可変個引数パラメーターを表すスライスのいずれかで使用できます(実際にはそれらの間に違いはないため)。
どちらも文字列の配列を作成しますが、違いはその呼び出し方法にあります。
func f(args ...string) {
}
// Would be called like this:
f("foo","bar","baz");
これにより、可変数の引数(すべて同じタイプ)を受け入れることができます
この良い例は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は、ゼロから同じタイプの多くのパラメーターを受け入れますが、メソッド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 : []