Go でのreflect.TypeOf() を使用した型アサーション
Go では、インターフェイスを操作するときに、型アサーションを実行する必要がある場合があります。基礎となる具体的なタイプを取得します。 Type (reflect.TypeOf() によって返される) をアサーション用の特定の型にキャストする方法に関して疑問が生じます。
問題:
コード例を考えてみましょう。
func IdentifyItemType(name string) interface{} { var item interface{} switch name { default: item = Article{} } return item }
ここでは、文字列名に基づいて構造体 (Article) を識別することを目的としています。ただし、型アサーションには型が必要ですが、reflect.TypeOf() は Type を返します。
解決策:
目的が外側の型をオンにすることである場合インターフェイス{}、リフレクションは必要ありません:
switch x.(type){ case int: dosomething() }
ただし、インターフェイス内の属性のタイプをオンにするには、リフレクションを使用できます。採用:
s := reflect.ValueOf(x) for i:=0; i<s.NumValues; i++{ switch s.Field(i).Interface().(type){ case int: dosomething() } }
これにより、インターフェイスの属性のタイプを切り替えることができます。洗練されたソリューションではありませんが、より良い代替手段が見つかるまで機能を提供します。
以上がGo の `reflect.TypeOf()` の結果に対して型アサーションを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。