>백엔드 개발 >Golang >Go에서 인터페이스와 임베디드 유형을 사용하여 일반 메서드를 만들려면 어떻게 해야 하나요?

Go에서 인터페이스와 임베디드 유형을 사용하여 일반 메서드를 만들려면 어떻게 해야 하나요?

Barbara Streisand
Barbara Streisand원래의
2024-10-27 01:20:02443검색

How can I use interfaces and embedded types to create generic methods in Go?

Golang의 일반 메소드 매개변수

Go에서는 다양한 유형과 작동하는 일반 메소드를 정의하여 유연성과 코드 재사용성을 높일 수 있습니다. . 제공된 코드의 문제를 해결하기 위해 인터페이스 및 내장 유형의 사용을 살펴보겠습니다.

인터페이스 사용

인터페이스는 유형이 인터페이스를 만족하도록 구현해야 합니다. 메소드 매개변수에 인터페이스를 사용하면 특정 유형에서 메소드를 분리하여 인터페이스를 구현하는 모든 유형과 함께 사용할 수 있습니다.

다음 코드를 고려하세요.

<code class="go">type Mammal interface {
    GetID() int
    GetName() string
}</code>

여기 , Mammal은 GetID와 GetName이라는 두 가지 메서드를 사용하여 인터페이스를 정의합니다.

임베딩 인터페이스

내장 인터페이스를 사용하면 하나 이상의 인터페이스 메서드를 상속하는 유형을 만들 수 있습니다. 예를 들어 Human 유형은 Mammal 인터페이스를 포함할 수 있습니다.

<code class="go">type Human struct {
    MammalImpl
    HairColor string
}</code>

구현

다음으로 MammalImpl과 HumanImpl 모두에 대해 GetID 및 GetName 메서드를 구현해야 합니다. . HumanImpl은 MammalImpl을 포함하므로 GetID 및 GetName에 대한 구현을 상속합니다.

<code class="go">type MammalImpl struct {
    ID   int
    Name string
}

func (m MammalImpl) GetID() int {
    return m.ID
}

func (m MammalImpl) GetName() string {
    return m.Name
}

type HumanImpl struct {
    MammalImpl
    HairColor string
}</code>

Count 함수 수정

이제 Count 함수를 수정하여 Mammal 인터페이스를 만족하는 모든 유형의 슬라이스:

<code class="go">func Count(ms []Mammal) *[]string {
   IDs := make([]string, len(ms))
   for i, m := range ms {
     IDs[i] = strconv.Itoa(m.GetID())  // Access ID via the method: GetID()
   }
   return &IDs
}</code>

포유류와 인간의 슬라이스 생성

마지막으로 Mammal을 구현하는 다양한 유형의 슬라이스를 생성할 수 있습니다.

<code class="go">mammals := []Mammal{
    MammalImpl{1, "Carnivorious"},
    MammalImpl{2, "Ominivorious"},
}

humans := []Mammal{
    HumanImpl{MammalImpl: MammalImpl{ID: 1, Name: "Peter"}, HairColor: "Black"},
    HumanImpl{MammalImpl: MammalImpl{ID: 2, Name: "Paul"}, HairColor: "Red"},
}</code>

결론

인터페이스와 임베디드 유형을 사용하면 다양한 데이터 유형과 작동하는 일반 메소드를 생성하여 Go 프로그램에서 더 많은 유연성과 코드 재사용성을 제공할 수 있습니다. .

위 내용은 Go에서 인터페이스와 임베디드 유형을 사용하여 일반 메서드를 만들려면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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