ホームページ >バックエンド開発 >Golang >あらゆる構造を受け入れる汎用構造

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

王林
王林転載
2024-02-06 08:21:04860ブラウズ

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

質問内容

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

リーリー ###メインコンテンツ### リーリー ###間違い###
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 までご連絡ください。