ホームページ > バックエンド開発 > Golang > Go で動的型リターンを実現するにはどうすればよいですか?

Go で動的型リターンを実現するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-02 05:33:14
オリジナル
622 人が閲覧しました

How to Achieve Dynamic Type Return in Go?

Golang で動的型の戻り値を処理する方法?

シナリオ:

Golang Revel 開発では、反復コードが発生します。 struct 型を含む同様のデータ戻り型に。次の関数を考えてみましょう:

func (c Helper) Brands() []*models.Brand {

    // Query rethinkdb and populate the Brand model
    var brands []*models.Brand
    rows.All(&brands)

    return brands

}

func (c Helper) BlogPosts() []*models.Post {

    // Query rethinkdb and populate the Post model
    var posts []*models.Post
    rows.All(&posts)

    return posts

}
ログイン後にコピー

どちらの場合も、戻り値の型は同じです (*[]struct)。重複を避けるために、動的戻り型アプローチが提案されています:

func (c Helper) ReturnModels(modelName string) []*interface{} {

    // Query rethinkdb with modelName and return []*interface{}
}
ログイン後にコピー

質問:

  • 動的戻り型は可能ですか?
  • 実装方法それは?

答え:

はい、動的型の戻りは実現可能です。関数は []*interface{} ではなく、interface{} を返す必要があります。実装方法は次のとおりです:

func (c Helper) ReturnModels(modelName string) interface{} {

    // Query rethinkdb with modelName and return interface{}
}
ログイン後にコピー

戻り値を利用するには、型スイッチまたは型アサーションを使用して元の型にキャストバックします:

例:

if brands, ok := ReturnModels("brands").([]Brand); ok {
    // ...
}

if posts, ok := ReturnModels("posts").([]Post); ok {
    // ...
}
ログイン後にコピー

このアプローチを実装すると、データに単一のヘルパー関数を使用することでコードの重複を大幅に削減できます。取得。

以上がGo で動的型リターンを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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