あらゆる構造を受け入れる汎用構造

王林
リリース: 2024-02-06 08:21:04
転載
767 人が閲覧しました

あらゆる構造を受け入れる汎用構造

質問内容

どんな構造でも受け入れられる普遍的な構造を作るには?

リーリー ###メインコンテンツ### リーリー ###間違い###
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) }
ログイン後にコピー

正解


定義により、

model

構造体は、
Select()

関数を追加するために存在するようです。モデルに含まれる値に (または追加してみてください)。つまり、Select()を呼び出して任意の型の値に対して何らかの操作を実行できる型が必要なようです (おそらく

Select()

実装内で使用します)何らかの形式のタイプスイッチ)。その場合は、interfaceを直接使用し、

model

仲介者を排除したほうがよいでしょう:リーリーSelect(Selectable)関数が冗長であることがわかります (

u.Select()

を直接呼び出すことができます。これは、Selectable の場合にそれを説明するためにのみ提供されています) ## が必要です#Selectableインターフェイスを実装する型であれば、任意の型の値を使用できます。 GoLang のinterfacesはダック タイピングを提供します。型がインターフェイスのコントラクトを実装する場合、具体的な型が事前に正式なインターフェイス定義を知らなくても、そのインターフェイスが実装されます。つまり、「アヒルのように見えて、アヒルのように鳴くなら、それはアヒルです。」目標がUser

型 (または他の型) から Select()ingロジックを削除し、別の「セレクター」に分離することである場合は、これを実装します。 model

仲介を削除し、単に型変換を実行する func を実装するだけです:リーリー

以上があらゆる構造を受け入れる汎用構造の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!