Go에서 컴파일러는 유형이 인터페이스의 공용 기능을 구현하는지 확인합니다. 이를 컴파일 타임 유형 검사라고 합니다. camlistore의 코드 예제는 이 개념을 보여줍니다.
var ( _ blobref.StreamingFetcher = (*CachingFetcher)(nil) _ blobref.SeekFetcher = (*CachingFetcher)(nil) _ blobref.StreamingFetcher = (*DiskCache)(nil) _ blobref.SeekFetcher = (*DiskCache)(nil) )
_ 접두어는 변수가 생성되지 않음을 나타냅니다. 대신 명령문은 명명된 유형이 해당 인터페이스를 구현하도록 지정하는 데 사용됩니다.
오른쪽(RHS) 부분에서는 변환 구문(*T)(nil)을 사용합니다. 이 구문은 유형화된 nil 값을 생성합니다. nil 값은 값이 없음을 나타내는 특별한 값입니다. 유형화된 nil 값은 특정 유형을 갖는 nil 값입니다.
이 경우 (*T)(nil)은 *T 유형을 갖는 nil 값을 생성합니다. 이는 포인터 변수를 선언하고 이를 nil에 할당하는 것과 같습니다. 그런 다음 nil 값을 사용하여 동일한 유형의 포인터에 할당할 수 있습니다.
예를 들어 다음 코드는 StreamingFetcher 유형의 포인터 변수 f를 선언합니다.
var f blobref.StreamingFetcher
다음 코드 그런 다음 *CachingFetcher 유형의 nil 값을 f:
f = (*CachingFetcher)(nil)
에 할당합니다. CachingFetcher 유형이 StreamingFetcher 인터페이스를 구현하기 때문에 이 할당은 유효합니다.
위 내용은 Go의 컴파일러는 컴파일 타임에 인터페이스 규정 준수를 어떻게 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!