>백엔드 개발 >Golang >golang에서 구조를 인터페이스로 변환하는 방법을 살펴보세요.

golang에서 구조를 인터페이스로 변환하는 방법을 살펴보세요.

王林
王林원래의
2024-04-07 11:36:02894검색

구조를 인터페이스로 변환하는 방법에는 구조를 삽입하거나 어댑터 패턴을 사용하는 두 가지 방법이 있습니다. 임베딩은 구조의 필드와 인터페이스의 메서드를 사용하여 새로운 유형을 생성하는 보다 직접적인 접근 방식입니다. 어댑터 패턴은 구조의 인스턴스를 포함하고 인터페이스를 구현하는 중간 유형을 사용합니다. 변환된 인터페이스에는 인터페이스 메서드만 포함되며 구조의 다른 필드는 포함되지 않습니다. 두 방법 모두 객체 지향 코드의 재사용성을 달성하고 시스템에서 다양한 인터페이스를 사용할 수 있는 유연성을 제공하는 데 사용될 수 있습니다.

golang에서 구조를 인터페이스로 변환하는 방법을 살펴보세요.

Go 언어의 구조에서 인터페이스로의 변환

구조와 인터페이스란 무엇인가요?

  • Structure은 관련 데이터의 집합을 포함하는 데이터 유형이며, 각 데이터 항목을 필드라고 합니다.
  • 인터페이스는 메소드 모음을 정의하는 추상 유형입니다. 이러한 메소드를 구현하는 모든 유형은 인터페이스를 구현할 수 있습니다.

구조를 인터페이스로 변환

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.