var 키워드 뒤의 밑줄과 인터페이스 이름은 무엇을 의미합니까?


80

에서 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 행을 삭제했는데 코드가 잘 작동합니다.


빈 식별자 _ 를 사용하여 구조체의 키를 엄격하게 제공 할 수도 있습니다. 참조를 위해 이것을 보십시오
Vallie

답변:


121

인터페이스 를 boolType만족 하는 정적 (컴파일 시간) 검사를 ValueConverter제공합니다. _변수의 이름이 효과적으로를 폐기 RHS 값으로 컴파일러를 알려줍니다,하지만 그것을 입력 - 확인하고 어떤 부작용이 있는지를 평가하지만, 그 자체 익명 변수가 어떤 프로세스 공간을 차지하지 않는 한 사용.

개발할 때 편리한 구조이며 인터페이스의 메소드 세트 및 / 또는 유형에 의해 구현 된 메소드가 자주 변경됩니다. 이 구조는 호환되도록 의도 된 인터페이스와 유형의 메소드 세트를 일치시키는 것을 잊어 버리지 않도록 보호하는 역할을합니다. go install이러한 누락 이 있는 깨진 (중간) 버전을 효과적으로 방지합니다 .



27

유형의 더미 값을 만들고 여기에 ValueConverterboolType개체를 할당 한 다음 삭제하는 것 같습니다 ( for _, elt := range myRange { ...}열거의 인덱스에 관심이없는 것처럼 이동중인 밑줄의 의미 ).

내 생각 엔 구조체 boolTypeValueConverter인터페이스를 구현 하는지 확인하기 위해 단순히 정적 검사에 해당한다는 것 입니다. 이렇게하면의 구현을 변경할 때이 인터페이스에 새 인터페이스 를 캐스팅 할 수 없기 때문에 인터페이스 boolType구현을 중단하면 컴파일러가 조기에 불평 ValueConverter할 것 boolType입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.