From 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) {....}
I known that ValueConverter is an interface name. Line 58 seems to declare that boolType implement interface ValueConverter, but is that necessary? I deleted line 58 and the code works well.
syntax
interface
go
underscores
dilfish
fuente
fuente
_
se puede usar para proporcionar estrictamente las claves en una estructura. Vea esto como referenciaRespuestas:
Proporciona una comprobación estática (tiempo de compilación) que
boolType
satisface laValueConverter
interfaz. El_
usado como nombre de la variable le dice al compilador que descarte efectivamente el valor RHS, pero que lo verifique y evalúe si tiene algún efecto secundario, pero la variable anónima per se no ocupa ningún espacio de proceso.Es una construcción útil cuando se desarrolla y el conjunto de métodos de una interfaz y / o los métodos implementados por un tipo se cambian con frecuencia. La construcción sirve como una protección contra el olvido de hacer coincidir los conjuntos de métodos de un tipo y de una interfaz donde la intención es que sean compatibles. Previene eficazmente a
go install
una versión rota (intermedia) con tal omisión.fuente
Parece que está creando un valor ficticio de tipo
ValueConverter
, asignándole un nuevoboolType
objeto y luego descartándolo (que es el significado del guión bajo en go, como enfor _, elt := range myRange { ...}
si no estuviera interesado en el índice de la enumeración).Supongo que simplemente corresponde a una verificación estática para garantizar que la estructura
boolType
implemente laValueConverter
interfaz. De esta manera, cuando cambie la implementación deboolType
, el compilador se quejará temprano si rompió la implementación de laValueConverter
interfaz, ya que no podrá enviar su nuevaboolType
a esta interfaz.fuente