ich einen int zu einem float64 wie folgt umwandeln:Go Typ Behauptung Umwandlung
var a int = 10
var b float64 = float64(a)
Hinsichtlich Behauptungen zu geben, Effective Go heißt es: ‚Der Typ wird durch die Schnittstelle der konkreten Typ gehalten entweder werden müssen oder ein zweiter Schnittstellentyp, in den der Wert konvertiert werden kann. '
Mit dem im Verstand, warum nicht funktioniert wie folgt:
func foo(a interface{}) {
fmt.Println(a.(float64))
}
func main() {
var a int = 10
foo(a)
}
Dies ist ein panic: interface conversion: interface is int, not float64
verursacht.
Beachten Sie, dass die Go-Spec sagt:
‚Für einen Ausdruck x von Schnittstellentyp und einen Typ T, der primären Ausdruck
x.(T)
behauptet, dass x nicht gleich Null ist und dass der Wert gespeichert in x ist vom Typ T.
Das widerspricht der Effective Go-Anweisung, scheint aber mehr im Einklang mit dem, was ich sehe.
vereinbart, jedoch ist die Operation, wie von der Runtime-Panic-Nachricht vorgeschlagen, tatsächlich eine "Interface-Konvertierung", im Gegensatz zu einer Assertion. Es wäre schön, wenn diese Art von Konversion natürlich passieren könnte. – Ferguzz
Sie können einen Typenschalter machen. Was ist natürlicher für Sie? –
@Ferguzz: Go ist ziemlich explizit in all seinen Konvertierungen, es gibt _no_ implizite oder automatische Konvertierungen. Das ist eine sehr gute Sache. Arten von "natürlichen Umwandlungen" sind das komplette Gegenteil von explizit. – Volker