Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que je reçois le message « Impossible de saisir une valeur non-interface » dans Go ?

Pourquoi est-ce que je reçois le message « Impossible de saisir une valeur non-interface » dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-09 20:32:02706parcourir

Why Am I Getting

Gestion des erreurs dans Go : résolution de "Impossible de saisir le commutateur sur une valeur non-interface"

Lorsque vous essayez d'implémenter l'assertion de type dans Go, vous peut rencontrer le message d'erreur : "Impossible de taper sur une valeur non-interface." Cette erreur se produit lorsque vous tentez d'effectuer un changement de type sur une valeur qui n'est pas un type d'interface.

Considérez l'extrait de code suivant :

package main

import "fmt"
import "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 := n.(type) {
    case Stringer:
        fmt.Println("Stringer:", v)
    default:
        fmt.Println("Unknown")
    }
}

Lors de l'exécution de ce code, vous rencontrerez le Erreur "Impossible de taper le commutateur sur une valeur non-interface". Pour résoudre ce problème, nous devons convertir la variable n en type interface{} avant d'effectuer le changement de type.

switch v := interface{}(n).(type)

Cette conversion convertit le type concret de n (*Number) en type d'interface interface{ }. Les interfaces dans Go agissent comme un contrat, permettant de stocker et d'accéder à n'importe quelle valeur via des méthodes courantes. En convertissant n en interface{}, nous pouvons ensuite effectuer le changement de type sur la valeur d'interface résultante.

Lorsque nous exécutons le code modifié, il imprimera avec succès "Stringer : 1", comme prévu. Cela démontre que l'assertion de type dans Go nécessite que la valeur soit un type d'interface, et la conversion en interface{} permet les commutateurs de type sur les valeurs non-interface.

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