So finden Sie einen Objekttyp in Go

Suraj Joshi 16 Februar 2024
  1. Stringformatierung zum Finden des Datentyps in Go
  2. Methode type Assertions
So finden Sie einen Objekttyp in Go

Datentypen geben den Typ an, der einer gültigen Go-Variablen zugeordnet ist. Es gibt vier Kategorien von Datentypen in Go, die wie folgt aussehen:

  • Basistyp: Zahlen, Zeichenketten und Booleans

  • Aggregierender Typ: Array und Structs

  • Referenztyp: Zeiger, Schnitte, Map, Funktionen und Kanäle

  • Schnittstellentyp

Wir können den Datentyp eines Objekts in Go unter Verwendung von Stringformatierung, reflect-Paket und Typ-Assertions finden.

Stringformatierung zum Finden des Datentyps in Go

Wir können die Printf-Funktion des Pakets fmt mit einer speziellen Formatierungsoption verwenden. Die verfügbaren Formatierungsoptionen zur Anzeige von Variablen mit fmt sind

formatieren Beschreibung
%v Den Variablenwert in einem Standardformat drucken
%+v Fügen Sie Feldnamen mit dem Wert
%#v eine Go-Syntax-Darstellung des Wertes
%T eine Go-Syntax-Darstellung des Typs des Wertes
%% ein wörtliches Prozentzeichen; verbraucht keinen Wert

Wir benutzen das %T Flag im fmt Paket, um einen Objekttyp in Go zu finden.

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

Ausgabe:

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

reflect-Paket

Wir können auch das Paket reflect verwenden, um den Datentyp eines Objekts zu finden. Die Funktion Typeof des Pakets reflect gibt einen Datentyp zurück, der mit .String() in einen string umgewandelt werden könnte.

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

}      

Ausgabe:

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

Methode type Assertions

Die Typ-Assertion-Methode gibt eine boolesche Variable zurück, um zu sagen, ob die Assertion-Operation erfolgreich ist oder nicht. Wir verwenden einen Typ Schalter, um mehrere Typ-Assertions in Serie durchzuführen, um den Datentyp des Objekts zu finden.

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

    }

}      

Ausgabe:

x is of type float64
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn