유형 별칭 및 메서드 상속
다음 코드 조각을 고려하세요.
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 }
이 코드는 다양한 방법을 보여줍니다. 유형 별명 생성 및 메소드에 미치는 영향 상속.
유형 별칭과 유형 정의
Go에는 별칭과 정의라는 두 가지 유형의 유형 선언이 있습니다.
유형 별칭을 사용한 메소드 상속
durWithMethods 유형 별칭은 기본 유형에서 메소드를 상속하는 새로운 유형을 생성합니다. dur를 입력하면 시간이 포함됩니다.Duration. 따라서 durWithMethods는 time.Duration에서 String() 메서드에 액세스할 수 있습니다.
fmt.Println(d.String()) // works
반면, durWithoutMethods 유형 별칭은 단순히 time.Duration의 이름을 바꿉니다. time.Duration은 원시 유형이므로 메소드가 없습니다. 따라서 durWithoutMethods에는 String() 메서드가 없습니다.
fmt.Println(dWM.String()) // doesn't compile
동일 기본 유형을 사용한 유형 별칭
단순히 기존 유형의 이름을 바꾸는 진정한 유형 별칭입니다. , 다음과 같습니다:
type sameAsDuration = time.Duration
이 경우 sameAsDuration time.Duration과 동일한 메소드를 갖습니다. 동일한 유형을 나타내기 때문입니다.
var sad sameAsDuration fmt.Println(sad.String()) // works
따라서 유형 별칭과 유형 정의 간의 미묘한 차이와 메소드 상속에 미치는 영향으로 인해 혼란이 발생합니다. 유형 별칭은 기본 유형의 메소드를 유지하는 반면 유형 정의는 자체 메소드 세트를 사용하여 새로운 유형을 생성합니다.
위 내용은 Go의 유형 별명은 기본 유형의 메소드를 상속합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!