¿Cómo encontrar el tipo de un objeto en Go?

Resuelto Rahul asked hace 11 años • 16 respuestas

¿Cómo encuentro el tipo de objeto en Go? En Python, solo lo uso typeofpara 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.

Rahul avatar Nov 24 '13 09:11 Rahul
Aceptado

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

dethtron5000 avatar Nov 24 '2013 02:11 dethtron5000

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"

Grzegorz Luczywo avatar Nov 26 '2014 23:11 Grzegorz Luczywo