ホームページ  >  記事  >  バックエンド開発  >  golang での構造からインターフェイスへの変換を調べる

golang での構造からインターフェイスへの変換を調べる

王林
王林オリジナル
2024-04-07 11:36:02841ブラウズ

構造体からインターフェースへの変換には、構造体を埋め込む方法とアダプター パターンを使用する方法の 2 つがあります。埋め込みは、構造体のフィールドとインターフェイスのメソッドを使用して新しい型を作成する、より直接的なアプローチです。アダプター パターンは、構造体のインスタンスを含み、インターフェイスを実装する中間型を使用します。変換されたインターフェイスにはインターフェイス メソッドのみが含まれ、構造体の他のフィールドは含まれません。どちらの方法も、オブジェクト指向コードの再利用性を実現し、システム内でさまざまなインターフェイスを使用する際の柔軟性を提供するために使用できます。

golang での構造からインターフェイスへの変換を調べる

Go 言語での構造体からインターフェースへの変換

構造体とインターフェースとは何ですか?

  • Structure は、関連するデータのコレクションを含むデータ型であり、各データ項目はフィールドと呼ばれます。
  • Interface はメソッドのコレクションを定義する抽象型であり、これらのメソッドを実装する任意の型でインターフェイスを実装できます。

構造からインターフェースへの変換

1.埋め込み

最も簡単な方法は、構造を埋め込むことです。インターフェイスに。これにより、構造体のフィールドとインターフェイスのメソッドの両方を持つ新しい型が作成されます。

type Person struct {
    Name string
    Age  int
}

type Personer interface {
    GetName() string
}

// 嵌入 Person 到 Personer 4
type EmbeddedPerson struct {
    Person
}

func (p EmbeddedPerson) GetName() string {
    return p.Name
}

2. アダプター パターン

もう 1 つの方法は、アダプター パターンを使用して、構造体のインスタンスを含み、インターフェイスを実装する新しい型を作成することです。

type Personer interface {
    GetName() string
}

type Person struct {
    Name string
    Age  int
}

// PersonAdapter 适配器
type PersonAdapter struct {
    p *Person
}

func (a *PersonAdapter) GetName() string {
    return a.p.Name
}

func main() {
    p := Person{"John", 30}
    pa := &PersonAdapter{&p}
    fmt.Println(pa.GetName()) // 输出:John
}

注:

  • 構造体フィールドは、インターフェイス メソッドがアクセスできるようにパブリックである必要があります。
  • 変換されたインターフェイス型にはインターフェイス メソッドのみが含まれ、構造体の他のフィールドは含まれません。

実際的なケース

名前と電子メールを含む User 構造があるとします。インターフェイス Userer を作成して、名前または電子メールに基づいてユーザーを検索できるようにします。

埋め込みを使用する:

type User struct {
    Name string
    Email string
}

type Userer interface {
    GetName() string
    GetEmail() string
}

type EmbeddedUser struct {
    User
}

func (u EmbeddedUser) GetName() string {
    return u.Name
}

func (u EmbeddedUser) GetEmail() string {
    return u.Email
}

アダプター モードを使用する:

type Userer interface {
    GetName() string
    GetEmail() string
}

type User struct {
    Name  string
    Email string
}

type UserAdapter struct {
    user *User
}

func (ua *UserAdapter) GetName() string {
    return ua.user.Name
}

func (ua *UserAdapter) GetEmail() string {
    return ua.user.Email
}

func main() {
    user := User{"John", "john@example.com"}
    userAdapter := &UserAdapter{&user}
    fmt.Println(userAdapter.GetName())  // 输出:John
    fmt.Println(userAdapter.GetEmail()) // 输出:john@example.com
}

以上がgolang での構造からインターフェイスへの変換を調べるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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