Go の動的戻り型: ジェネリックスと型アサーションの使用
動的戻り型は、さまざまな型の値を返すためにプログラミング言語でよく使用されます。 。 Go では、関数の戻り値の型が固定されているため、これは直接可能ではありません。ただし、同様の機能を実現できる回避策があります。
1 つのアプローチは、interface{} などの汎用の戻り値の型を使用することです。この型は任意の型の値を保持できるため、関数がさまざまな型の値を返すことができます。ただし、コンパイラはコンパイル時に実際の型を決定できないため、このアプローチでは戻り値を安全に使用するために型アサーションが必要です。
func ReturnModels(modelName string) interface{} { // Get models from the database if modelName == "brands" { return []Brand{ {Name: "Gucci"}, {Name: "LV"}, } } else if modelName == "posts" { return []Post{ {Author: "J.K.R.", Content: "Whatever"}, } } return nil } func main() { result := ReturnModels("brands") if brands, ok := result.([]Brand); ok { fmt.Printf("List of Brands: %v\n", brands) } result = ReturnModels("posts") if posts, ok := result.([]Post); ok { fmt.Printf("List of Posts: %v", posts) } }
この例では、ReturnModels 関数はインターフェース値を返します。{} main 関数は型アサーションを実行して、戻り値の実際の型を取得します。型アサーションが成功すると、戻り値を期待どおりに使用できます。
このアプローチにより、型の安全性を維持しながら、Go で動的な戻り値の型が可能になります。ただし、型アサーションのオーバーヘッドが発生し、型アサーションを確実に成功させるために追加のエラー処理が必要になる場合があります。
以上がジェネリックと型アサーションを使用して動的な戻り値の型を実現するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。