Maison  >  Article  >  développement back-end  >  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)

王林
王林original
2023-08-25 15:03:371136parcourir

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

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

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类型")
    }
}

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!

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