Von 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) {....}
Ich wusste, dass ValueConverter ein Schnittstellenname ist. Zeile 58 scheint zu deklarieren, dass boolType die Schnittstelle ValueConverter implementiert, aber ist das notwendig? Ich habe Zeile 58 gelöscht und der Code funktioniert gut.
syntax
interface
go
underscores
Dilfish
quelle
quelle
_
kann auch verwendet werden, um die Schlüssel in einer Struktur strikt bereitzustellen. Siehe dies als ReferenzAntworten:
Es bietet eine statische Prüfung (Kompilierungszeit),
boolType
die dieValueConverter
Schnittstelle erfüllt . Der_
als Name der Variablen verwendete Wert weist den Compiler an, den RHS-Wert effektiv zu verwerfen, ihn jedoch zu überprüfen und zu bewerten, ob er Nebenwirkungen hat, aber die anonyme Variable an sich benötigt keinen Prozessraum.Es ist ein praktisches Konstrukt beim Entwickeln und der Methodensatz einer Schnittstelle und / oder die von einem Typ implementierten Methoden werden häufig geändert. Das Konstrukt schützt vor dem Vergessen, die Methodensätze eines Typs und einer Schnittstelle abzugleichen, bei denen die Kompatibilität beabsichtigt ist. Es verhindert effektiv
go install
eine kaputte (Zwischen-) Version mit einer solchen Auslassung.quelle
Es scheint, als würden Sie einen Dummy-Wert vom Typ erstellen
ValueConverter
, ihm ein neuesboolType
Objekt zuweisen und es dann verwerfen (was die Bedeutung des Unterstrichs in go ist, alsfor _, elt := range myRange { ...}
ob Sie nicht am Index der Aufzählung interessiert wären).Ich vermute, dass es einfach einer statischen Überprüfung entspricht, um sicherzustellen, dass die Struktur
boolType
dieValueConverter
Schnittstelle implementiert . Auf diese WeiseboolType
beschwert sich der Compiler beim Ändern der Implementierung von frühzeitig, wenn Sie die Implementierung derValueConverter
Schnittstelle unterbrochen haben, da er Ihre neue nichtboolType
in diese Schnittstelle umwandeln kann.quelle