> 백엔드 개발 > Golang > 유형 별칭이 원시 유형이 아닌 포함된 유형의 메서드를 상속하는 이유는 무엇입니까?

유형 별칭이 원시 유형이 아닌 포함된 유형의 메서드를 상속하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-16 09:50:03
원래의
395명이 탐색했습니다.

Why does a type alias inherit methods from an embedded type but not from a raw type?

메서드 상속에 대한 유형 별칭의 영향 이해

Go와 같은 프로그래밍 언어의 일반적인 측면인 유형 별칭은 기존 유형에 대한 새 식별자를 만듭니다. 그러나 메소드 상속 측면에서 이들의 동작은 혼란스러울 수 있습니다.

다음 Go 코드를 고려하세요.

package main

import (
    "fmt"
    "time"
)

type dur struct {
    time.Duration
}

type durWithMethods dur

type durWithoutMethods time.Duration

func main() {
    var d durWithMethods // works ??
    fmt.Println(d.String())
    
    var dWM durWithoutMethods
    fmt.Println(dWM.String()) // doesn't compile
}
로그인 후 복사

이 코드는 dur, durWithMethods 및 durWithoutMethods의 세 가지 유형을 선언합니다. dur 유형은 구조체 삽입 시간입니다.Duration. durWithMethods 유형은 dur의 별칭으로 정의됩니다. 반면, durWithoutMethods 유형은 time.Duration의 별칭입니다.

durWithMethods가 time.Duration에서 String() 메서드를 상속하는 반면 durWithoutMethods는 상속하지 않는 이유에 대한 의문이 생깁니다.

유형 선언 및 메소드 상속

Go에서 유형 선언은 유형 정의와 유형 별칭이라는 두 가지 범주로 나뉩니다.

  • 유형 정의 create new 유형을 지정하고 상속된 메서드를 삭제합니다.
  • 유형 별칭은 단지 새 식별자를 기존 유형에 바인딩할 뿐입니다.

이 경우 dur은 유형 정의이고 둘 다 durWithMethods 및 durWithoutMethods는 유형 별칭입니다.

메서드 상속에 미치는 영향

dur와 같은 유형 정의를 사용하여 새 유형이 생성되면 상속된 모든 메서드가 손실됩니다. 이는 dur이 본질적으로 time.Duration의 String() 메서드를 소유하지 않음을 의미합니다. 그러나 durWithMethods와 같은 유형 별칭을 사용하여 새 유형이 생성되면 기본 유형의 모든 메서드(이 경우 dur.

Time.Duration 및 Raw Types

time.Duration은 원시 유형이므로 메서드를 가질 수 없습니다. 그러나 dur과 같은 구조체 내에 포함될 수 있으며 이를 통해 구조체가 메서드를 상속할 수 있습니다.

유형 별칭과 직접 별칭

durWithoutMethods는 직접적인 별칭입니다. 시간.기간. 이러한 유형 제거 동작은 직접 별칭에 고유하며 durWithMethods와 같은 유형 별칭에는 적용되지 않습니다.

결론적으로, durWithMethods는 시간을 포함하는 유형에 대한 별칭이기 때문에 time.Duration의 String() 메서드를 상속합니다. .Duration, durWithoutMethods는 원시 유형의 직접적인 별칭이기 때문에 이 메서드를 상속하지 않습니다.

위 내용은 유형 별칭이 원시 유형이 아닌 포함된 유형의 메서드를 상속하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿