var 키워드 뒤의 밑줄과 인터페이스 이름은 무엇을 의미합니까?
에서 http://golang.org/src/pkg/database/sql/driver/types.go :
type ValueConverter interface {
// ConvertValue converts a value to a driver Value.
ConvertValue(v interface{}) (Value, error)
}
var Bool boolType
type boolType struct{}
var _ ValueConverter = boolType{} // line 58
func (boolType) String() string { return "Bool" }
func (boolType) ConvertValue(src interface{}) (Value, error) {....}
ValueConverter가 인터페이스 이름이라는 것을 알고 있습니다. 58 행은 boolType이 ValueConverter 인터페이스를 구현한다고 선언하는 것 같지만 이것이 필요한가요? 58 행을 삭제했는데 코드가 잘 작동합니다.
인터페이스 를 boolType만족 하는 정적 (컴파일 시간) 검사를 ValueConverter제공합니다. _변수의 이름이 효과적으로를 폐기 RHS 값으로 컴파일러를 알려줍니다,하지만 그것을 입력 - 확인하고 어떤 부작용이 있는지를 평가하지만, 그 자체 익명 변수가 어떤 프로세스 공간을 차지하지 않는 한 사용.
개발할 때 편리한 구조이며 인터페이스의 메소드 세트 및 / 또는 유형에 의해 구현 된 메소드가 자주 변경됩니다. 이 구조는 형식의 메서드 집합과 호환되도록 의도하는 인터페이스의 일치를 잊어 버리지 않도록 보호하는 역할을합니다. go install이러한 누락 이 있는 고장난 (중간) 버전을 효과적으로 방지합니다 .
유형의 더미 값을 만들고 ValueConverter새 boolType개체를 할당 한 다음 삭제하는 것 같습니다 ( for _, elt := range myRange { ...}열거의 색인에 관심이없는 것처럼 이동에서 밑줄의 의미 ).
내 생각 엔 구조체 boolType가 ValueConverter인터페이스를 구현 하는지 확인하기 위해 단순히 정적 검사에 해당한다는 것 입니다. 이런 식으로의 구현을 변경할 때 boolType컴파일러는 ValueConverter인터페이스 구현을 중단하면 새 boolType인터페이스를이 인터페이스 로 캐스팅 할 수 없으므로 조기에 불만 을 표시합니다.
'Program Club' 카테고리의 다른 글
| 백본 모델에서 초기화와 생성자의 차이점은 무엇입니까 (0) | 2020.11.14 |
|---|---|
| iOS 개발을 위해 Xcode 대신 (또는 함께) Vim 사용 (0) | 2020.11.14 |
| 배치 파일 실행 후 cmd 창을 자동으로 닫는 방법은 무엇입니까? (0) | 2020.11.14 |
| JavaScript 블록에 HTML 주석을 사용하는 것이 여전히 타당합니까? (0) | 2020.11.14 |
| 자바 스크립트는 배열의 일부입니다. (0) | 2020.11.14 |