Из 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, и код работает хорошо.
syntax
interface
go
underscores
дилфиш
источник
источник
_
может использоваться для строгого предоставления ключей в структуре. Смотрите это для справкиОтветы:
Он обеспечивает статическую (во время компиляции) проверку,
boolType
удовлетворяющуюValueConverter
интерфейсу._
Используются как имя переменного сообщает компилятор для эффективного сброса значения РИТ, но проверять тип его и оценить его , если он имеет какие - либо побочные эффекты, но анонимные переменные сами по себе не несет никакого процесс пространства.Это удобная конструкция при разработке, и набор методов интерфейса и / или методы, реализованные типом, часто меняются. Конструкция служит защитой от того, чтобы забыть сопоставить наборы методов типа и интерфейса, цель которых - сделать их совместимыми. Это эффективно предотвращает
go install
появление ломаной (промежуточной) версии с таким упущением.источник
Похоже, вы создаете фиктивное значение типа
ValueConverter
, присваивая новоеboolType
объект, а затем отбрасываете его (что является значением подчеркивания в go, какfor _, elt := range myRange { ...}
будто вас не интересует индекс перечисления).Я предполагаю, что это просто соответствует статической проверке, чтобы убедиться, что структура
boolType
действительно реализуетValueConverter
интерфейс. Таким образом, когда вы изменяете реализациюboolType
, компилятор заранее пожалуется, если вы нарушили реализациюValueConverter
интерфейса, поскольку он не сможет преобразовать ваш новыйboolType
в этот интерфейс.источник