Revel アプリケーションで、類似のデータ型を返すさまざまな関数によってコードの冗長性が発生しました。モデルごとに複数のヘルパー関数を作成する代わりに、インターフェース タイプを返す動的ソリューションを想定します。{}この質問は、このアプローチの実現可能性を詳しく掘り下げています。
はい、Go で構造体の型を動的に返すことは可能ですが、慎重な検討が必要です。インターフェース{}と型アサーションの
の代わりに[]*interface{} の場合、interface{} を返すように関数を宣言する必要があります。これにより、関数は構造体を含む任意の型を返すことができます。
func (c Helper) ReturnModels(modelName string) interface{}
次の例を考えてみましょう。
type Post struct { Author string Content string } type Brand struct { Name string } var database map[string]interface{} // Simulates a dynamic data source func ReturnModels(modelName string) interface{} { return database[modelName] // Retrieve data from hypothetical database }
あなた型スイッチまたは型アサーションを使用して、戻り値を元の値にキャストできます。 type.
type switcher func(interface{}) interface{} var result switcher switch modelName := database["myModel"].(type) { case Brand: result = func(v interface{}) interface{} { return v.(Brand) } case Post: result = func(v interface{}) interface{} { return v.(Post) } } fmt.Println(result(database["myModel"]))
この例では、switch ステートメントはデータベースから取得したデータの型を評価します。型に基づいて、結果関数は特定のキャスト関数に割り当てられ、その後呼び出されます。
インターフェイスを使用して Go で構造体型を動的に返すことは可能ですが、注意深い処理が必要です。{} 。型アサーションを使用すると、正しい型がキャストされることを確認できます。詳細については、リンクされた例とドキュメントを参照してください。
以上がGo 関数は「interface{}」を使用して異なる構造体の型を動的に返すことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。