Go
Typumwandlungen
Suche…
Grundtypumwandlung
Es gibt zwei grundlegende Arten der Typkonvertierung in Go:
// Simple type conversion
var x := Foo{} // x is of type Foo
var y := (Bar)Foo // y is of type Bar, unless Foo cannot be cast to Bar, then compile-time error occurs.
// Extended type conversion
var z,ok := x.(Bar) // z is of type Bar, ok is of type bool - if conversion succeeded, z has the same value as x and ok is true. If it failed, z has the zero value of type Bar, and ok is false.
Testen der Schnittstellenimplementierung
Da Go die implizite Schnittstellenimplementierung verwendet, wird kein Fehler bei der Kompilierung angezeigt, wenn Ihre Struktur keine Schnittstelle implementiert, die Sie implementieren wollten. Sie können die Implementierung mithilfe von Typumwandlung explizit testen: type MyInterface-Schnittstelle {Thing ()}
type MyImplementer struct {}
func (m MyImplementer) Thing() {
fmt.Println("Huzzah!")
}
// Interface is implemented, no error. Variable name _ causes value to be ignored.
var _ MyInterface = (*MyImplementer)nil
type MyNonImplementer struct {}
// Compile-time error - cannot case because interface is not implemented.
var _ MyInterface = (*MyNonImplementer)nil
Implementieren Sie ein Einheitensystem mit Typen
Dieses Beispiel zeigt, wie das Typsystem von Go zum Implementieren eines Einheitensystems verwendet werden kann.
package main
import (
"fmt"
)
type MetersPerSecond float64
type KilometersPerHour float64
func (mps MetersPerSecond) toKilometersPerHour() KilometersPerHour {
return KilometersPerHour(mps * 3.6)
}
func (kmh KilometersPerHour) toMetersPerSecond() MetersPerSecond {
return MetersPerSecond(kmh / 3.6)
}
func main() {
var mps MetersPerSecond
mps = 12.5
kmh := mps.toKilometersPerHour()
mps2 := kmh.toMetersPerSecond()
fmt.Printf("%vmps = %vkmh = %vmps\n", mps, kmh, mps2)
}
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow