[解決済み] ...interface{}の意味 (ドット・ドット・ドット・インターフェース)
質問
以下は、私が質問しているGoのコードの一部です。
具体的には
a
は何ですか?
func DPrintf(format string, a ...interface{}) (n int, err error) {
if Debug > 0 {
n, err = fmt.Printf(format, a...)
}
return
}
この3つの点は何なのか、どなたか教えていただけませんか?
また
...interface{}
は何をするのでしょうか?
どのように解決するのですか?
3つのドット (...) を先頭に持つパラメータタイプは
ヴァリアディックパラメータ
. つまり、そのパラメータには任意の数または引数を渡すことができます(ちょうど
fmt.Printf()
). この関数は、パラメータの引数リストを、パラメータに対して宣言された型のスライスとして受け取ります (
[]interface{}
のように)。は
囲碁の仕様
という記述があります。
関数シグネチャの最後のパラメータは、...で始まる型を持っている場合があります。このようなパラメータを持つ関数はvariadicと呼ばれ、そのパラメータに対して0個以上の引数で呼び出されることがあります。
パラメータです。
a ...interface{}
である、に相当する機能に対して。
a []interface{}
違いは、このような関数にどのように引数を渡すかです。スライスの各要素を別々に渡すか、ひとつのスライスとして渡すかです。その場合、スライス値のサフィックスに3つのドットを付けなければなりません。以下の例では、同じように呼び出すことになります。
fmt.Println("First", "Second", "Third")
と同じになる。
s := []interface{}{"First", "Second", "Third"}
fmt.Println(s...)
このことは、かなりよく説明されている 囲碁の仕様 にも書かれています。
関数と呼び出しが与えられると
func Greeting(prefix string, who ...string) Greeting("nobody") Greeting("hello:", "Joe", "Anna", "Eileen")
内の
Greeting
,who
は値を持つnil
という値を持ち、最初の呼び出しでは[]string{"Joe", "Anna", "Eileen"}
を呼び出します。最終引数がスライス型に割り当て可能な場合
[]T
の値として変更されずに渡されるかもしれません。...T
パラメータの値としてそのまま渡されるかもしれません。...
. この場合、新しいスライスは作成されません。与えられたスライス
s
と呼び出すとs := []string{"James", "Jasmine"} Greeting("goodbye:", s...)
内の
Greeting
,who
と同じ値を持つことになります。s
と同じ値をとります。
関連
-
[解決済み] interface{}の意味は?
-
[解決済み] time.Sleepを使わずにすべてのゴルーチンが終了するのを待つには?
-
[解決済み] スライスを宣言するのか、スライスを作るのか?
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] スライスを格納する interface{} 上の範囲
-
[解決済み] golangでは、マップから値のスライスを取得する良い方法はありますか?
-
[解決済み] sync.WaitGroupの例は正しいですか?
-
[解決済み] あるプログラムの依存ファイルをすべて取得する方法
-
[解決済み] ローカルファイルからio.Readerを作成する
-
[解決済み] 空のスライスをチェックするにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] オブジェクトのプロパティを二重引用符で囲んで使用するには?
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] Goプロジェクトの賢明なレイアウト方法とは [終了しました]。
-
[解決済み] マップから構造体への変換
-
[解決済み] スライスを変数入力として渡すには?
-
[解決済み] 文字列を小文字に変換する方法を教えてください。
-
[解決済み] golangのスライスで要素を検索する方法
-
[解決済み] ローカルファイルからio.Readerを作成する
-
[解決済み] Goでマップをクリアするには?
-
[解決済み] 空のスライスをチェックするにはどうしたらいいですか?