¿Cómo encontrar el tipo de un objeto en Go?
¿Cómo encuentro el tipo de objeto en Go? En Python, solo lo uso typeof
para buscar el tipo de objeto. De manera similar, en Go, ¿hay alguna manera de implementar lo mismo?
Aquí está el contenedor desde el que estoy iterando:
for e := dlist.Front(); e != nil; e = e.Next() {
lines := e.Value
fmt.Printf(reflect.TypeOf(lines))
}
No puedo obtener el tipo de líneas de objeto en este caso, que es una matriz de cadenas.
El paquete de reflexión Go tiene métodos para inspeccionar el tipo de variables.
El siguiente fragmento imprimirá el tipo de reflexión de una cadena, entero y flotante.
package main
import (
"fmt"
"reflect"
)
func main() {
tst := "string"
tst2 := 10
tst3 := 1.2
fmt.Println(reflect.TypeOf(tst))
fmt.Println(reflect.TypeOf(tst2))
fmt.Println(reflect.TypeOf(tst3))
}
Producción:
string
int
float64
consulte: http://play.golang.org/p/XQMcUVsOja para verlo en acción.
Más documentación aquí: http://golang.org/pkg/reflect/#Type
Encontré 3 formas de devolver el tipo de variable en tiempo de ejecución:
Usando formato de cadena
func typeof(v interface{}) string {
return fmt.Sprintf("%T", v)
}
Usando el paquete reflejar
func typeof(v interface{}) string {
return reflect.TypeOf(v).String()
}
Usando el interruptor de tipo
func typeof(v interface{}) string {
switch v.(type) {
case int:
return "int"
case float64:
return "float64"
//... etc
default:
return "unknown"
}
}
Cada método tiene un mejor caso de uso diferente:
formato de cadena: espacio corto y reducido (no es necesario importar el paquete reflectante)
Paquete de reflexión: cuando necesitamos más detalles sobre el tipo, tenemos acceso a las capacidades de reflexión completas.
cambio de tipo: permite agrupar tipos, por ejemplo, reconoce todos los tipos int32, int64, uint32, uint64 como "int"