Go言語では、
[]string
文字列配列です
また...string
、パラメータとしても使用します。
違いはなんですか?
関数の定義:
func f(args ...string) {}
この関数を次のように呼び出すことはできますか?
args := []string{"a", "b"}
f(args)
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...)
この構文は、リテラル構文を使用して作成されたスライス、または可変個引数パラメーターを表すスライスのいずれかで使用できます(これらの間に実際には違いがないため)。
[]string
構文を使用して作成されたスライスの違いについて尋ねられた質問に答えています。わかりやすくするために、回答に引用を追加します。:-)
どちらも文字列の配列を作成しますが、違いはその呼び出し方法にあります。
func f(args ...string) {
}
// Would be called like this:
f("foo","bar","baz");
これにより、可変数の引数(すべて同じタイプ)を受け入れることができます。
この良い例はfmt.Print
、友達です。友達は、必要な数のアルグメントを受け入れることができます。
def fn(*args)
構造とほぼ同じです。
これがあなたが望むものです:
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では、必須の引数を宣言する必要があります。
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 : []
[]string
はスライスであり、配列ではありません。配列とスライスの違いは微妙ですが重要です。