No he encontrado un buen recurso para usar interface{}
tipos. Por ejemplo
package main
import "fmt"
func weirdFunc(i int) interface{} {
if i == 0 {
return "zero"
}
return i
}
func main() {
var i = 5
var w = weirdFunc(5)
// this example works!
if tmp, ok := w.(int); ok {
i += tmp
}
fmt.Println("i =", i)
}
¿Conoce una buena introducción al uso de Go's interface{}
?
preguntás especificas:
- ¿Cómo obtengo el tipo de w "real"?
- ¿Hay alguna forma de obtener la representación de cadena de un tipo?
- ¿Hay alguna forma de utilizar la representación de cadena de un tipo para convertir un valor?
types
type-conversion
go
cc joven
fuente
fuente
reflect.TypeOf
.También puede hacer cambios de tipo:
fuente
Puede usar reflect (
reflect.TypeOf()
) para obtener el tipo de algo, y el valor que da (Type
) tiene una representación de cadena (String
método) que puede imprimir.fuente
fmt
el formato "% T" en lugar de usarlo directamentereflect
.Aquí hay un ejemplo de decodificación de un mapa genérico usando tanto el interruptor como la reflexión, así que si no coincide con el tipo, use la reflexión para averiguarlo y luego agregue el tipo la próxima vez.
fuente
Los interruptores de tipo también se pueden usar con material de reflexión:
fuente
Voy a ofrecer una forma de devolver un booleano basado en pasar un argumento de un tipo de reflexión a un receptor de tipo local (porque no pude encontrar nada como esto).
Primero, declaramos nuestro tipo anónimo de tipo reflect.
Luego agregamos un constructor para nuestro tipo local AnonymousType que puede tomar cualquier tipo potencial (como interfaz):
Luego agregamos una función para nuestra estructura AnonymousType que afirma contra un reflect.
Esto nos permite llamar a lo siguiente:
Puede ver una versión más larga y funcional aquí: https://play.golang.org/p/EIAp0z62B7
fuente
Hay varias formas de obtener una representación de cadena de un tipo. Los interruptores también se pueden usar con tipos de usuario:
Enlace a un parque infantil: https://play.golang.org/p/VDeNDUd9uK6
fuente