>백엔드 개발 >Golang >Golang에서 임베디드 구조체 메서드를 어떻게 재정의할 수 있나요?

Golang에서 임베디드 구조체 메서드를 어떻게 재정의할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-10-27 08:55:30904검색

How Can You Override Embedded Struct Methods in Golang?

Golang에서 삽입된 구조체 메서드 재정의

Golang에서 구조체가 다른 구조체를 삽입할 때(삽입이라고 함) 삽입된 구조체의 필드 메소드는 임베딩 구조체에 직접 액세스할 수 있게 됩니다. 그러나 포함 구조체가 포함 구조체의 메서드를 재정의하는 경우 원래 메서드를 재정의할 수 있습니다.

다음 코드를 고려하세요.

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

Base를 Sub에 포함했습니다. 이제 Sub에서 Base의 Set 메서드에 액세스하려고 하면 Sub의 자체 Set 메서드에 의해 숨겨집니다.

<code class="go">func t16() {
    s := &Sub{}
    // This calls Base's Set method
    s.Base.Set(1) 
    // This causes an error, as s.Set hides Base's Set
    s.Set(10) 
}</code>

이 동작을 재정의하려면 Sub의 Set 메서드를 재정의하여 Base의 Set 메서드를 명시적으로 호출할 수 있습니다.

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

이제 s.Set()을 호출하면 Sub의 변경 사항을 추적하면서 Base의 Set 메서드를 호출합니다.

<code class="go">func t16() {
    s := &Sub{}
    // Calls Sub's overridden Set method
    s.Set(10) 
    fmt.Printf("%+v\n", s) // Output: {Base:{val:10} changed:true}
}</code>

이 메서드를 사용하면 다음을 수행할 수 있습니다. 포함된 구조체 필드를 통해 원래 메서드에 대한 액세스를 유지하면서 포함된 구조체의 메서드를 재정의합니다.

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

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