Comment trouver un type d'objet dans Go

Suraj Joshi 11 décembre 2023
  1. Formatage de chaîne pour trouver le type de données dans Go
  2. Méthode type assertions
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
Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn