どんな構造でも受け入れられる普遍的な構造を作るには?
リーリー ###メインコンテンツ### リーリー ###間違い###package model type model struct { m *interface{} } func (m *model) Select(){ } type ( field struct { table string field string } fields map[string]field ) type User struct { schema string fields fields } func NewUser() *interface{} { model_user := &User{ schema: "main", fields: fields{ "id": field{"user","id"}, "client_id": field{"user","client_id"}, "email": field{"user","email"}, }, } return model(model_user) }
正解
関数を追加するために存在するようです。モデルに含まれる値に (または追加してみてください)。
つまり、Select()
を呼び出して任意の型の値に対して何らかの操作を実行できる型が必要なようです (おそらく
実装内で使用します)何らかの形式のタイプスイッチ)。
その場合は、interface
を直接使用し、
仲介者を排除したほうがよいでしょう:
リーリー
Select(Selectable)
関数が冗長であることがわかります (
を直接呼び出すことができます。これは、Selectable の場合にそれを説明するためにのみ提供されています) ## が必要です
#Selectable インターフェイスを実装する型であれば、任意の型の値を使用できます。
GoLang の
interfaces はダック タイピングを提供します。型がインターフェイスのコントラクトを実装する場合、具体的な型が事前に正式なインターフェイス定義を知らなくても、そのインターフェイスが実装されます。つまり、「アヒルのように見えて、アヒルのように鳴くなら、それはアヒルです。」
目標が
User
Select()ing
ロジックを削除し、別の「セレクター」に分離することである場合は、これを実装します。 model 仲介を削除し、単に型変換を実行する func を実装するだけです:
リーリー
以上があらゆる構造を受け入れる汎用構造の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。