Go
Tipo de conversiones
Buscar..
Conversión de tipo básico
Hay dos estilos básicos de conversión de tipos en 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.
Implementación de la interfaz de prueba
Como Go utiliza la implementación de la interfaz implícita, no obtendrá un error en tiempo de compilación si su estructura no implementa una interfaz que tenía la intención de implementar. Puede probar la implementación explícitamente utilizando conversión de tipos: escriba la interfaz de MyInterface {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
Implementar un sistema de unidades con tipos
Este ejemplo ilustra cómo se puede usar el sistema de tipos de Go para implementar algún sistema de unidades.
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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow