ホームページ >バックエンド開発 >Golang >Go 関数は「interface{}」を使用して異なる構造体の型を動的に返すことができますか?

Go 関数は「interface{}」を使用して異なる構造体の型を動的に返すことができますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-28 22:51:12576ブラウズ

Can Go Functions Dynamically Return Different Struct Types Using `interface{}`?

Go で構造体の型を動的に返す方法?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。