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