インターフェース変数の型の決定: ゴルディアンの結び目のスライス
Go プログラミングの領域では、インターフェースの型を操作すると、次のことが可能になります。{}不確実性のタッチを導入します。よく発生する困惑する質問の 1 つは、インターフェイス変数にスライスが含まれているかどうかを確認する方法です。
このジレンマを解決するには、提供されている関数を詳しく調べてみましょう。
func name(v interface{}) { if is_slice() { for _, i := range v { my_var := i.(MyInterface) ... do smth } } else { my_var := v.(MyInterface) ... do smth } }
問題の核心は、とらえどころのない is_slice メソッドにあります。 v が実際にスライスであるかどうかを識別するには、実行時にその基になる型を検査する方法が必要です。ここでリフレクションが登場します。
リフレクションの力: 本質を暴く
Go のリフレクションは、実行時に値を内省して操作する手段を提供します。これにより、インターフェイス変数の具体的な型を取得し、それが目的の型(この場合はスライス)と一致するかどうかを判断できます。
次のコード スニペットは、is_slice:
func IsSlice(v interface{}) bool { return reflect.TypeOf(v).Kind() == reflect.Slice }
for _, i := range v { my_var := i.(MyInterface) ... do smth }
my_var := v.(MyInterface) ... do smth
追加の考慮事項:
以上がGo で「interface{}」変数がスライスを保持しているかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。