Go の ...interface{} の意味を理解する
Go では、先頭に 3 つのドット (... ) は可変個引数パラメーターとして知られています。これは、関数がその特定のパラメータに対して任意の数の引数を受け入れることができることを意味します。
次の関数について考えてみましょう:
func DPrintf(format string, a ...interface{}) (n int, err error) { if Debug > 0 { n, err = fmt.Printf(format, a...) } return }
パラメータ a は ...interface{} 型であり、これは次のことを示します任意の型の 0 個以上の引数を受け入れることができるということです。これらの引数は、パラメータに対して宣言された型のスライスとして関数によって受け取られます。この場合、それは []interface{} です。
Go 仕様には次の説明があります:
「関数シグネチャの最後のパラメータには、先頭に ... が付いている型が付いている場合があります。そのようなパラメータを持つ関数は可変引数と呼ばれ、0 個以上の引数を指定して呼び出すことができます。パラメータ。"
したがって、...interface{} 型のパラメータは、関数内の []interface{} 型のパラメータと同等です。違いは、引数が関数に渡される方法にあります。これらは個別に渡すことも、単一のスライスとして渡すこともできます。その場合、スライス値の末尾に 3 つのドット (...) を付ける必要があります。
たとえば、fmt.Println 関数への次の 2 つの呼び出し同じ結果が生成されます:
fmt.Println("First", "Second", "Third")
s := []interface{}{"First", "Second", "Third"} fmt.Println(s...)
どちらの場合も、スライス s は 3 つのドットを使用して Println 関数に渡されます。可変長引数として扱う必要があることを示します。
このメカニズムは、関数が可変数の引数を受け入れることを可能にすることで柔軟性を提供し、関数の多用途性と再利用性を高めます。
以上がGo の可変個引数関数における「...interface{}」とは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。