Maison > développement back-end > Golang > 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
Libérer: 2024-11-09 20:32:02
original
788 Les gens l'ont consulté

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")
    }
}
Copier après la connexion

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)
Copier après la connexion

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