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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-02 05:33:14692ブラウズ

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

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