Maison > développement back-end > Golang > Résoudre l'erreur Golang : assertion de type non valide : 'x'.(T) (type U non-interface à gauche)

Résoudre l'erreur Golang : assertion de type non valide : 'x'.(T) (type U non-interface à gauche)

王林
Libérer: 2023-08-25 15:03:37
original
1187 Les gens l'ont consulté

解决golang报错:invalid type assertion: 'x'.(T) (non-interface type U on left)

Résoudre l'erreur Golang : assertion de type invalide : 'x'.(T) (type U sans interface à gauche)

Avant-propos :

Dans le développement Golang, l'utilisation de l'assertion de type est une technologie courante, utilisez Convertit une interface tapez la valeur sur un type de béton spécifié. Cependant, lors de l'utilisation d'assertions de type, vous rencontrerez parfois une erreur : assertion de type non valide : 'x'.(T) (type U non-interface à gauche). Cet article détaillera les raisons de cette erreur et proposera des solutions.

Contexte du problème :

Dans Golang, la syntaxe de l'assertion de type est très simple, généralement écrite sous la forme : value.(Type), où value est une valeur d'un type d'interface et Type est un type spécifique. L'assertion de type est sûre lorsque le type sous-jacent de la valeur est le même que Type ou que Type est une interface du type sous-jacent de la valeur. Cependant, lorsque le type sous-jacent de Type est incompatible avec la valeur, l'erreur ci-dessus se produit.

Analyse du problème :

Tout d'abord, regardons un exemple simple :

package main

import "fmt"

func main() {
    var x int = 10
    y := x.(float64)
    fmt.Println(y)
}
Copier après la connexion

Dans le code ci-dessus, la variable x est une valeur de type int. Lors de l'utilisation de l'assertion de type pour convertir x en type float64, l'erreur ci-dessus sera déclenchée. Étant donné que le type int et le type float64 sont incompatibles, cette assertion de type n'est pas valide.

Solution :

Pour le problème ci-dessus, nous pouvons le résoudre des manières suivantes :

  1. Utilisez le type correct

Dans l'exemple ci-dessus, nous essayons de convertir une valeur de type int en type float64. Pour résoudre ce problème, vous pouvez déclarer directement x comme type float64 au lieu du type int. Le code modifié est le suivant :

package main

import "fmt"

func main() {
    var x float64 = 10
    y := x.(float64)
    fmt.Println(y)
}
Copier après la connexion
  1. Utilisation de la conversion de type

Si nous avons vraiment besoin de convertir une valeur en un autre type, nous pouvons utiliser l'opérateur de conversion de type pour convertir. Le code modifié est le suivant :

package main

import "fmt"

func main() {
    var x int = 10
    y := float64(x)
    fmt.Println(y)
}
Copier après la connexion

Dans l'exemple ci-dessus, float64(x) est utilisé pour convertir la valeur x de type int en type float64.

  1. Utilisez le mode ok d'assertion de type

Si vous n'êtes pas sûr qu'une assertion de type réussira, vous pouvez utiliser le mode ok pour éviter le rapport d'erreurs. Un exemple est le suivant :

package main

import "fmt"

func main() {
    var x interface{} = 10
    if y, ok := x.(float64); ok {
        fmt.Println(y)
    } else {
        fmt.Println("无法转换为float64类型")
    }
}
Copier après la connexion

Dans l'exemple ci-dessus, nous déclarons x comme type d'interface vide et utilisons une instruction if pour déterminer si l'assertion de type réussit. En cas de succès, imprimez la valeur convertie ; en cas d'échec, imprimez un message d'invite.

Résumé :

Dans Golang, les assertions de type peuvent être utilisées pour convertir une valeur d'un type d'interface en un type concret spécifié. Cependant, lorsque le type sous-jacent est incompatible avec le type à convertir, une erreur sera déclenchée : assertion de type invalide : 'x'.(T) (type U non-interface à gauche). Nous pouvons éviter cette erreur en utilisant le type correct, la conversion de type ou l'assertion de type en mode ok.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal