Go 言語では、親型オブジェクトのサブタイプ プロパティにアクセスする必要がある状況によく遭遇します。これは、構造を定義するときに入れ子構造を使用しているためである可能性があります。ただし、Go 言語には継承の概念がないため、親タイプのオブジェクトを通じてサブタイプのプロパティに直接アクセスすることはできません。では、この要件を Go で実装するにはどうすればよいでしょうか?以下に、よく使われるいくつかの方法を紹介します。
ファイルストレージを作成しています。さまざまな種類のファイルを作成しようとしています。これをシミュレートするには、コードを使用します:
リーリー次の出力が期待されています:
リーリーしかし、Go コンパイラでは次のエラーが発生しました:
./main.go:38:44: v.Duration が未定義です (タイプ File にはフィールドまたはメソッド Duration がありません)
./main.go:40:39: v.Width が未定義です (File 型にはフィールドまたはメソッド width がありません)
./main.go:40:48: v.Height が未定義です (タイプ File にはフィールドまたはメソッド Height がありません)
エラーを修正するにはどうすればよいですか?
<code>package main import ( "fmt" "time" ) type File interface{} type Audio struct { File Duration time.Duration } type Image struct { File Width uint Height uint } func main() { var files = map[string]File{ "1": Audio{ Duration: 14 * time.Second, }, "2": Image{ Height: 9989, Width: 1111, }, "3": Image{ Width: 1234, Height: 5678, }, } for k, v := range files { switch v.(type) { case Audio: fmt.Printf("%s: Audio %d seconds", k, v.Duration / time.Second) case Image: fmt.Printf("%s: Image %dx%d", k, v.Width, v.Height) } } } </code>
は、期待する型で新しい v
を宣言します。
以上がGoで親タイプオブジェクトのサブタイププロパティにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。