¿Cómo encuentro el tipo de un objeto en Go? En Python, solo uso typeof
para buscar el tipo de objeto. Del mismo modo, 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.
go
go-reflect
Rahul
fuente
fuente
fmt.Printf("%T\n", var)
Respuestas:
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.
Salida:
ver: http://play.golang.org/p/XQMcUVsOja para verlo en acción.
Más documentación aquí: http://golang.org/pkg/reflect/#Type
fuente
Encontré 3 formas de devolver el tipo de una variable en tiempo de ejecución:
Usar formato de cadena
Usando paquete de reflejo
Usar aserciones de tipo
Cada método tiene un mejor caso de uso diferente:
formato de cadena: huella corta y baja (no es necesario para importar el paquete reflejado)
paquete de reflexión: cuando se necesitan más detalles sobre el tipo, tenemos acceso a las capacidades de reflexión completa
aserciones de tipo: permite agrupar tipos, por ejemplo, reconocer todos los tipos int32, int64, uint32, uint64 como "int"
fuente
t
, por lo que set := v.(type)
conviertev.(type)
y_ = t
ya no es necesaria.case 'T': p.fmt.fmtS(reflect.TypeOf(arg).String())
. paquete fmt usando el tipo de reflejo para imprimirUse el paquete de reflexión :
Produce:
Patio de recreo
Ejemplo usando
ValueOf(i interface{}).Kind()
:Produce:
Patio de recreo
fuente
if reflect.TypeOf(err) == string
?Para obtener una representación de cadena:
De http://golang.org/pkg/fmt/
Salidas:
fuente
Me mantendría alejado del reflejo. paquete. En su lugar, use% T
fuente
La mejor manera es usar el concepto de reflexión en Google.
reflect.TypeOf
da el tipo junto con el nombre del paquetereflect.TypeOf().Kind()
da el tipo de subrayadofuente
Para ser breve, utilice
fmt.Printf("%T", var1)
o sus otras variantes en el paquete fmt.fuente
Puede verificar el tipo de cualquier variable / instancia en tiempo de ejecución ya sea usando la
TypeOf
función de paquetes "reflect" o usandofmt.Printf()
:fuente
Para obtener el tipo de campos en struct
Salida
Ver en IDE https://play.golang.org/p/bwIpYnBQiE
fuente
puedes usar
reflect.TypeOf
.int
,string
): le proporcione su nombre (por ejemplo:int
,string
)<package name>.<struct name>
(por ejemplo:main.test
)fuente
Si tenemos estas variables:
fuente
Puedes usar:
interface{}..(type)
como en este patio de recreofuente
el paquete reflect viene a rescatar:
Mira esta demo
fuente
Puede usar el método fmt package fmt.Printf (), más información: https://golang.org/pkg/fmt/
ejemplo: https://play.golang.org/p/aJG5MOxjBJD
fuente