Maison  >  Article  >  développement back-end  >  Que sont les assertions de type en langage Go ?

Que sont les assertions de type en langage Go ?

王林
王林original
2023-06-11 08:56:321666parcourir

Le langage Go est un langage de programmation typé statiquement. L'assertion de type (Type Assertion) est l'un des moyens de déterminer le type de valeur spécifique stocké dans la variable d'interface du programme. Dans le langage Go, une variable d'interface peut stocker n'importe quel type de valeur, mais les informations de type stockées dans la variable d'interface sont limitées et tous les types d'opérations ne peuvent pas être effectués sur la variable d'interface. Par conséquent, dans les applications réelles, nous devons juger et convertir les types de valeurs spécifiques stockés dans les variables d’interface. C'est ce que font les assertions de type.

Les assertions de type dans le langage Go se présentent sous deux formes : les assertions de type valeur et les assertions de type pointeur. Les assertions de type valeur et les assertions de type pointeur ont des manières légèrement différentes de juger et de convertir les types de valeur des variables d'interface.

Assertion de type valeur :

Le format syntaxique de l'assertion de type valeur est le suivant :

x.(T)

Où, x est une variable de type interface et T représente un type spécifique. Cette assertion de type est vraie si x stocke une valeur de type T, et fausse sinon.

Le résultat de l'assertion de type a deux valeurs. La première valeur est la valeur après la conversion de x en type T. La deuxième valeur est une valeur booléenne indiquant si le résultat de cette assertion de type est vrai. L'implémentation spécifique du code est la suivante :

var x interface{}
x = "hello"

s, ok := x.(string)
if ok {
    fmt.Printf("x 类型为 string,值为 %s。
", s)
} else {
    fmt.Printf("x 不是 string 类型。
")
}

Dans le code ci-dessus, une variable de type d'interface vide x est d'abord définie et une chaîne "hello" est affectée à la variable x. L'instruction d'assertion de type valeur x.(string) tente de convertir la variable x en un type chaîne, s représente la chaîne convertie et ok indique si l'assertion de type est réussie. Si ok est vrai, cela signifie que le type de valeur stocké dans x est un type de chaîne et nous pouvons afficher la chaîne convertie s. Si ok est faux, cela signifie que x n'est pas un type chaîne et les informations d'invite correspondantes peuvent être affichées.

Assertion de type pointeur :

Le format syntaxique de l'assertion de type pointeur est similaire à celui de l'assertion de type valeur, sauf que le pointeur doit être manipulé lors de l'assertion.

x.(*T)

Où, *T représente le type de pointeur de type T. Cette assertion de type est vraie si la valeur stockée dans x est du type pointeur T, et fausse sinon.

Semblables aux assertions de type valeur, les assertions de type pointeur ont également deux valeurs. La première valeur est la valeur après que x soit converti en pointeur de type T. La deuxième valeur est une valeur booléenne, indiquant si le résultat de cette assertion de type est vrai. . L'implémentation spécifique du code est la suivante :

type Foo struct {
    bar string
}

func main() {
    var i interface{} = &Foo{"hello"}

    f, ok := i.(*Foo)
    if ok {
        fmt.Printf("i 是指针类型,指向 Foo 类型的变量,f.bar 的值为 %s。
", f.bar)
    } else {
        fmt.Printf("类型断言失败。
")
    }
}

Dans le code ci-dessus, une structure de type Foo est définie, une variable d'interface vide i est définie dans la fonction principale et un pointeur vers une structure de type Foo est attribué à la variable. je. L'assertion de type pointeur x.(*Foo) tente de convertir la variable x en un type de pointeur pointant vers une structure de type Foo, f représente le pointeur converti et ok représente si l'assertion de type est réussie. Si ok est vrai, cela signifie que le type valeur stocké dans x est un type pointeur pointant vers une structure de type Foo, et nous pouvons afficher la valeur du champ dans la structure pointée par le pointeur. Si ok est faux, cela signifie que x n'est pas un type de pointeur pointant vers une structure de type Foo et que les informations d'invite correspondantes peuvent être affichées.

Résumé :

L'assertion de type est un moyen couramment utilisé pour faire fonctionner les variables d'interface dans le langage Go. L'assertion de type peut déterminer le type stocké dans la variable d'interface, puis y effectuer les opérations correspondantes. Il existe deux formes d'assertions de type dans le langage Go, les assertions de type valeur et les assertions de type pointeur. Lorsque vous utilisez des assertions de type, vous devez faire attention à la gestion des erreurs pour éviter les erreurs d'exécution.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn