Trova un tipo di oggetto in Go
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
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn