Trova un tipo di oggetto in Go

  1. Formattazione delle stringhe per trovare il tipo di dati in Go
  2. Metodo type assertions

I tipi di dati specificano il tipo associato a una variabile Go valida. Esistono quattro categorie di tipi di dati in Go che sono le seguenti:

  • Tipo di base: numeri, stringhe e booleani

  • Tipo di aggregato: array e strutture

  • Tipo di riferimento: puntatori, sezioni, mappe, funzioni e canali

  • Tipo di interfaccia

Possiamo trovare il tipo di dati di un oggetto in Go usando formattazione stringa, pacchetto reflect e asserzioni di tipo.

Formattazione delle stringhe per trovare il tipo di dati in Go

Possiamo usare la funzione Printf del pacchetto fmt con una speciale opzione di formattazione. Le opzioni di formattazione disponibili per visualizzare le variabili usando fmt sono:

Formato Descrizione
%v Stampa il valore della variabile in un formato predefinito
%+v Aggiungi i nomi dei campi con il valore
%#v una rappresentazione della sintassi Go del valore
%T una rappresentazione della sintassi Go del tipo di valore
%% un segno di percentuale letterale; non consuma valore

Usiamo il flag %T nel pacchetto fmt per trovare un tipo di oggetto in 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)
}       

Produzione:

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

Pacchetto reflect

Possiamo anche usare il pacchetto reflect per trovare il tipo di dati di un oggetto. La funzione TypeOf del pacchetto reflect restituisce un tipo di dati che potrebbe essere convertito in una stringa 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())

}      

Produzione:

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

Metodo type assertions

Il metodo di asserzione del tipo restituisce una variabile booleana per indicare se l’operazione di asserzione ha esito positivo o meno. Usiamo un switch di tipo per eseguire diverse asserzioni di tipo in serie per trovare il tipo di dati dell’oggetto.

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")

    }

}      

Produzione:

x is of type float64