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

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

Linda Hamilton
リリース: 2024-12-28 22:51:12
オリジナル
564 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート