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