구조를 인터페이스로 변환하는 방법에는 구조를 삽입하거나 어댑터 패턴을 사용하는 두 가지 방법이 있습니다. 임베딩은 구조의 필드와 인터페이스의 메서드를 사용하여 새로운 유형을 생성하는 보다 직접적인 접근 방식입니다. 어댑터 패턴은 구조의 인스턴스를 포함하고 인터페이스를 구현하는 중간 유형을 사용합니다. 변환된 인터페이스에는 인터페이스 메서드만 포함되며 구조의 다른 필드는 포함되지 않습니다. 두 방법 모두 객체 지향 코드의 재사용성을 달성하고 시스템에서 다양한 인터페이스를 사용할 수 있는 유연성을 제공하는 데 사용될 수 있습니다.
Go 언어의 구조에서 인터페이스로의 변환
구조와 인터페이스란 무엇인가요?
구조를 인터페이스로 변환
1. Embedding
가장 간단한 방법은 구조를 인터페이스에 삽입하는 것입니다. 그러면 구조의 필드와 인터페이스의 메서드가 모두 포함된 새로운 유형이 생성됩니다.
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. 어댑터 패턴
또 다른 접근 방식은 어댑터 패턴을 사용하여 구조의 인스턴스를 포함하고 인터페이스를 구현하는 새로운 유형을 만드는 것입니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!