>  기사  >  백엔드 개발  >  Go에서 내장된 구조체의 메서드를 어떻게 재정의하나요?

Go에서 내장된 구조체의 메서드를 어떻게 재정의하나요?

Patricia Arquette
Patricia Arquette원래의
2024-10-26 14:08:31295검색

How do I override an embedded struct's method in Go?

Go에서 내장된 구조체 메서드 재정의

Go에서 구조체를 삽입할 때 내장된 구조체의 메서드는 구조체 삽입. 이를 통해 포함된 구조체의 기능에 쉽게 액세스할 수 있습니다. 그러나 포함 구조체가 동일한 이름을 가진 자체 메서드를 구현하는 경우 포함 구조체의 메서드는 숨겨집니다.

다음 예를 고려하세요.

<code class="go">package main

import "fmt"

type Base struct {
    val int
}
func (b *Base)Set(i int) {
    b.val = i
}
type Sub struct {
    Base
    changed bool
}

func (b *Sub)Set(i int) {
    b.val = i
    b.changed = true
}
func main() {
    s := &Sub{}
    s.Base.Set(1)
    var b *Base = &s.Base
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>

이 예에서 Sub 구조체는 기본 구조체를 포함합니다. Base 구조체에는 Sub 구조체의 자체 Set 메서드에 의해 숨겨진 Set 메서드가 있습니다. s.Base.Set(1)이 호출되면 Sub 구조체의 Set 메서드가 호출되지 않고 Base 구조체의 Set 메서드가 호출됩니다.

포함 구조체에서 포함된 구조체의 메서드를 재정의하려면 포함된 구조체를 간단히 호출하면 됩니다. 포함 구조체의 메서드 내에서 구조체의 메서드를 가져옵니다. 예를 들어 다음 코드는 Sub 구조체에서 Base 구조체의 Set 메서드를 재정의합니다.

<code class="go">func (b *Sub)Set(i int) {
    b.Base.Set(i)
    b.changed = true
}</code>

이 변경으로 s.Set(1)이 호출되면 Sub 구조체의 Set 메서드가 호출됩니다. 이는 Base 구조체의 Set 메서드를 호출하고 변경된 필드를 true로 설정합니다. 이를 통해 포함된 구조체의 기능에 계속 액세스하면서 포함된 구조체의 메서드 동작을 재정의할 수 있습니다.

위 내용은 Go에서 내장된 구조체의 메서드를 어떻게 재정의하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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