Maison > développement back-end > Golang > le corps du texte

Pourquoi mon code Go génère-t-il une erreur « impossible de taper sur une valeur non-interface » ?

Mary-Kate Olsen
Libérer: 2024-11-10 15:15:02
original
378 Les gens l'ont consulté

Why does my Go code throw a

Comprendre les erreurs de changement de type

Dans Go, l'utilisation d'un commutateur de type sur une variable non-interface entraîne l'erreur "Impossible de taper le commutateur sur valeur non-interface." Pour résoudre ce problème, il est nécessaire de convertir la variable en un type d'interface approprié avant de tenter le changement de type.

Dans l'exemple donné, le code tente d'effectuer un changement de type sur la variable n, qui est une instance de la structure Number. Cependant, la structure Number n'implémente aucune interface, elle ne peut donc pas être utilisée directement dans un commutateur de type.

Résoudre l'erreur

Pour corriger l'erreur, vous devez convertissez d’abord n ​​en type interface{}, qui représente une interface vide. Cela convertit n en une valeur pouvant contenir n’importe quel type. Ensuite, dans le commutateur de type, vous pouvez affirmer le type réel de la valeur sous-jacente à l'aide du mot-clé type.

Voici à quoi ressemblerait le code corrigé :

import (
  "fmt"
  "strconv"
)

type Stringer interface {
  String() string
}

type Number struct {
  v int
}

func (number *Number) String() string {
  return strconv.Itoa(number.v)
}

func main() {
  n := &Number{1}
  switch v := interface{}(n).(type) {
  case Stringer:
    fmt.Println("Stringer:", v)
  default:
    fmt.Println("Unknown")
  }
}
Copier après la connexion

Avec ce changement, le le code imprime avec succès "Stringer : 1".

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