Cómo encontrar un tipo de objeto en Go

  1. Formato de cadena para encontrar el tipo de datos en Go
  2. Método type assertions

Los tipos de datos especifican el tipo asociado a una variable Go válida. Hay cuatro categorías de tipos de datos en Go que son las siguientes:

  • Tipo básico: Números, cadenas y booleanos

  • Tipo de agregado: Matriz y estructura

  • Tipo de referencia: Punteros, cortes, mapas, funciones y canales

  • Tipo de interfaz

Podemos encontrar el tipo de datos de un objeto en Go usando el formato de cadena, el paquete reflejo y las afirmaciones de tipo.

Formato de cadena para encontrar el tipo de datos en Go

Podemos usar la función Printf del paquete fmt con una opción de formato especial. Las opciones de formato disponibles para mostrar las variables usando fmt son:

Formato Descripción
%v Imprimir el valor de la variable en un formato predeterminado
%+v Añade los nombres de los campos con el valor
%#v una representación de la sintaxis de Go del valor
%T una representación de la sintaxis Go del tipo de valor
%% un signo de porcentaje literal; no consume ningún valor

Usamos la bandera 1% T en el paquete FMT para encontrar un tipo de objeto en Go.

package main

import "fmt"

func main() {
    i := 18
    fmt.Printf("Datatype of i : %T\n", i)

    s := "Dixya Lyaho"
    fmt.Printf("Datatype of s : %T\n", s)

    f := 25.32
    fmt.Printf("Datatype of f : %T\n", f)
}       

Producción:

Datatype of i : int
Datatype of s : string
Datatype of f : float64

Paquete de reflexión

También podemos usar el paquete reflejo para encontrar el tipo de datos de un objeto. La función Typeof del paquete reflect devuelve un tipo de datos que puede ser convertido en una cadena con .String().

package main

import (
    "fmt"
    "reflect"
)

func main() {
    o1 := "string"
    o2 := 10
    o3 := 1.2
    o4 := true
    o5 := []string{"foo", "bar", "baz"}
    o6 := map[string]int{"apple": 23, "tomato": 13}

    fmt.Println(reflect.TypeOf(o1).String())
    fmt.Println(reflect.TypeOf(o2).String())
    fmt.Println(reflect.TypeOf(o3).String())
    fmt.Println(reflect.TypeOf(o4).String())
    fmt.Println(reflect.TypeOf(o5).String())
    fmt.Println(reflect.TypeOf(o6).String())

}      

Producción:

string
int
float64
bool
[]string
map[string]int

Método type assertions

El método de afirmación de tipo devuelve una variable booleana para decir si la operación de afirmación tiene éxito o no. Utilizamos un tipo switch para hacer varias afirmaciones de tipo en serie para encontrar el tipo de datos del objeto.

package main

import (
    "fmt"
)

func main() {
    var x interface{} = 3.85
    switch x.(type) {
    case int:
        fmt.Println("x is of type int")
    case float64:
        fmt.Println("x is of type float64")
    default:
        fmt.Println("x is niether int nor float")

    }

}      

Producción:

x is of type float64
comments powered by Disqus