Maison > développement back-end > Golang > Pourquoi un changement de type avec plusieurs cas dans Go provoque-t-il des erreurs de variable « non définies » et comment cela peut-il être résolu ?

Pourquoi un changement de type avec plusieurs cas dans Go provoque-t-il des erreurs de variable « non définies » et comment cela peut-il être résolu ?

Mary-Kate Olsen
Libérer: 2024-12-16 10:53:11
original
304 Les gens l'ont consulté

Why Does a Type Switch with Multiple Cases in Go Cause

Commutateur de type avec plusieurs cas dans Go

Lors de l'utilisation d'un commutateur de type avec plusieurs cas, on peut rencontrer une erreur indiquant qu'une variable dans un cas avec plusieurs types n'est pas défini. Ce comportement découle de la spécification du langage Go, qui stipule qu'un switch guard de type peut inclure une courte déclaration de variable.

Dans de tels cas, la variable a le même type que le type répertorié dans les cas à type unique. Cependant, dans les cas d'une liste de plusieurs types, la variable a le type de l'expression dans le type switch guard.

Pour illustrer cela, considérons le code suivant :

type A struct {
  a int
}

func (this *A) test() {
  fmt.Println(this)
}

type B struct {
  A
}

var foo interface{}
foo = A{}

switch a := foo.(type) {
  case B, A:
    a.test()
}
Copier après la connexion

En cours d'exécution ce code entraînera l'erreur "a.test non défini (le type interface {} est une interface sans méthode)." En effet, la variable a a le type interface{}, et non le type du cas spécifique.

Pour résoudre ce problème, on peut affirmer que l'expression de type switch guard a la méthode attendue. Par exemple :

type tester interface {
  test()
}

func main() {
  var foo interface{}
  foo = &B{}

  if a, ok := foo.(tester); ok {
    fmt.Println("foo has test() method")
    a.test()
  }
}
Copier après la connexion

Ce code vérifie d'abord si foo a la méthode test(), et si c'est le cas, il attribue la valeur de foo à a et appelle la méthode test().

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal