Comment trouver un type d'objet dans Go
Les types de données spécifient le type associé à une variable Go valide. Il existe quatre catégories de types de données dans le Go, qui sont les suivantes:
-
Type de base: Nombres, chaînes de caractères et booléens
-
Type d’agrégat: Tableau et structures
-
Type de référence: Pointeurs, tranches, cartes, fonctions et canaux
-
Type d’interface
Nous pouvons trouver le type de données d’un objet dans Go en utilisant le “formatage de chaîne”, le paquet reflect
et les “assertions de type”.
Formatage de chaîne pour trouver le type de données dans Go
Nous pouvons utiliser la fonction Printf
du paquet fmt
avec une option de formatage spéciale. Les options de formatage disponibles pour afficher les variables utilisant fmt
sont les suivantes:
Formatage | Description |
---|---|
%v |
Imprimer la valeur de la variable dans un format par défaut |
%+v |
Ajouter les noms de champs avec la valeur |
%#v |
une représentation de la valeur selon la syntaxe de Go |
%T |
une représentation syntaxique du type de valeur |
%% |
un signe de pourcentage littéral ; ne consomme aucune valeur |
Nous utilisons le drapeau %T
dans le paquet fmt
pour trouver un type d’objet dans 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)
}
Production:
Datatype of i : int
Datatype of s : string
Datatype of f : float64
Paquet de réflexion
Nous pouvons également utiliser le paquet reflect
pour trouver le type de données d’un objet. La fonction Typeof
du paquet reflect
retourne un type de données qui pourrait être converti en une chaîne
avec .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())
}
Production:
string
int
float64
bool
[]string
map[string]int
Méthode type assertions
La méthode d’assertion de type retourne une variable booléenne pour dire si l’opération d’assertion réussit ou non. Nous utilisons un switch
de type pour faire plusieurs assertions de type en série afin de trouver le type de données de l’objet.
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")
}
}
Production:
x is of type float64
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn