유형 별칭 복잡성 탐구
다음 코드 조각을 고려하세요.
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 }
직접 time.Duration(durWithoutMethods)의 별칭은 어떤 것도 상속하지 않습니다. 메서드, 중첩된 유형 별칭(durWithMethods)은 해당 메서드에 대한 액세스 권한을 부여합니다. 이러한 혼란은 유형 정의와 유형 별칭 간의 근본적인 차이에서 비롯됩니다.
새 유형 정의와 기존 유형 이름 바꾸기
Go에서 유형 선언은 두 가지 범주로 나뉩니다. 유형 정의 및 유형 별칭. 유형 정의는 하나 이상의 기존 유형을 삽입하여 새로운 유형을 탄생시킵니다. 중첩 유형이 아닌 최상위 내장 유형에서만 메서드를 상속합니다.
반면에 유형 별칭은 새 식별자를 기존 유형에 바인딩하는 단순한 약어입니다. 새로운 유형을 생성하지 않으므로 기본 유형은 변경되지 않습니다. 기본 유형과 연관된 모든 메소드는 원래 이름이나 별칭을 통해 쉽게 액세스할 수 있습니다.
durWithMethods 이해
durWithMethods 유형은 dur 유형을 다음과 같이 효과적으로 확장합니다. 그것을 삽입. dur에는 time.Duration이 포함되어 있으므로 String()을 포함하여 Duration의 메서드를 상속합니다. 따라서 코드의 d.String()은 예상대로 작동합니다.
Unveiling durWithoutMethods
durWithMethods와 달리 durWithoutMethods는 time.Duration의 직접적인 별칭입니다. 아무것도 확장하지 않으므로 기본 time.Duration 유형으로만 구성됩니다. time.Duration 메소드는 별도의 메소드 세트가 있는 고유한 유형이기 때문에 durWithoutMethods로 전송되지 않습니다. 따라서 dWM.String()은 컴파일되지 않습니다.
위 내용은 Go의 유형 별칭이 내장 유형에서 상속될 때 왜 다르게 동작합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!