syntax - imports - golang tutorial
¿Qué significa un guión bajo y el nombre de la interfaz después de la palabra clave var en golang? (2)
Parece que está creando un valor ficticio de tipo ValueConverter
, asignándole un nuevo objeto boolType
y luego descartándolo (que es el significado del guión bajo en go, como en el for _, elt := range myRange { ...}
si no está interesado en el índice de la enumeración).
Supongo que simplemente corresponde a una comprobación estática para garantizar que struct boolType
implemente la interfaz ValueConverter
. De esta manera, cuando cambie la implementación de boolType
, el compilador se quejará pronto si rompe la implementación de la interfaz ValueConverter
, ya que no podrá boolType
su nuevo boolType
a esta interfaz.
http://golang.org/src/pkg/database/sql/driver/types.go
30 type ValueConverter interface {
31 // ConvertValue converts a value to a driver Value.
32 ConvertValue(v interface{}) (Value, error)
33 }
54 var Bool boolType
55
56 type boolType struct{}
57
58 var _ ValueConverter = boolType{}
59
60 func (boolType) String() string { return "Bool" }
61
62 func (boolType) ConvertValue(src interface{}) (Value, error) {....}
Como he mencionado anteriormente, sé que ValueConverter es un nombre de interfaz, la línea 58 parece declarar que boolType implementa la interfaz ValueConverter, ¿es necesario? Eliminé la línea 58, el código funciona bien
Proporciona una comprobación estática (tiempo de compilación) de que boolType
satisface la interfaz ValueConverter
. El _
usado como nombre de la variable le dice al compilador que efectivamente descarte el valor RHS, pero que lo compruebe y lo 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 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 hacerlos compatibles. Evita efectivamente go install
una go install
interrumpida (intermedia) con tal omisión.