Go言語では、
[]string
は文字列配列です
また、...string
をパラメーターとして使用します。
違いはなんですか?
関数定義:
func f(args ...string) {}
この関数を次のように呼び出すことはできますか?
args := []string{"a", "b"}
f(args)
[]string
は文字列配列です
技術的には、基礎となる配列を参照するスライスです
また、
...string
をパラメーターとして使用します。違いはなんですか?
構造に関しては、実際には何もありません。両方の構文から得られるデータ型は同じです。
...
パラメーター構文は、可変長パラメーターを作成します。ゼロ個以上のstring
引数を受け入れ、それらをスライスとして参照します。
f
の呼び出しに関して、次の構文を使用して、文字列のスライスをvariadicパラメーターに渡すことができます。
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...)
}
関数のパラメーターを簡素化します。次に例を示します( 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 : []