Maison >développement back-end >Golang >Comment résoudre l'erreur Golang : le type non-interface ne peut pas être attribué à l'interface{}, solution

Comment résoudre l'erreur Golang : le type non-interface ne peut pas être attribué à l'interface{}, solution

WBOY
WBOYoriginal
2023-08-21 14:03:461520parcourir

如何解决golang报错:non-interface type cannot be assigned to interface{ },解决方案

Comment résoudre l'erreur Golang : le type non-interface ne peut pas être attribué à l'interface{ }, solution

Dans le processus d'écriture de code dans Golang, nous rencontrons parfois un message d'erreur courant : le type non-interface ne peut pas être attribué à interface{ }. Ce message d'erreur peut apparaître lorsque le programme tente d'attribuer un type non-interface au type interface{}. Alors, comment résoudre ce problème ? La solution est détaillée ci-dessous, avec des exemples de code.

Tout d'abord, nous devons comprendre les concepts d'interfaces et de types d'interface{} dans Golang. Dans Golang, une interface est une collection d'une ou plusieurs signatures de méthode. Le type interface{} représente une interface vide, c'est-à-dire qu'elle peut accepter des valeurs de n'importe quel type. Étant donné que le type interface{} peut accepter des valeurs de n'importe quel type, une assertion de type est requise lors de l'attribution de valeurs.

Ce qui suit est un exemple de code simple qui montre que le type d'erreur non-interface ne peut pas être attribué à l'interface{ } lors de l'affectation et la solution correspondante :

package main

import (
    "fmt"
)

type Animal interface {
    Say() string
}

type Cat struct {
    Name string
}

func (c Cat) Say() string {
    return "Meow"
}

func main() {
    cat := Cat{Name: "Tom"}

    // 错误示例:尝试将非接口类型赋值给interface{}类型
    var animal interface{}
    animal = cat // 报错:non-interface type cannot be assigned to interface{}
    fmt.Println(animal)

    // 正确示例:使用类型断言将非接口类型赋值给interface{}类型
    animal = cat.(Animal)
    fmt.Println(animal.Say())
}

Dans l'exemple ci-dessus, nous définissons une interface Animal et une structure Cat, le La structure Cat implémente la méthode Say. Dans la fonction principale, nous créons un objet Cat et essayons de l'attribuer à une variable de type interface{}. Dans l'exemple d'erreur, nous attribuons directement le chat à l'animal, et un message d'erreur de type non-interface ne peut pas être attribué à l'interface{} apparaîtra.

Pour résoudre ce problème, nous devons utiliser des assertions de type pour attribuer des types non-interface aux types interface{}. Dans le bon exemple, nous utilisons cat.(Animal) pour convertir cat en type d'interface Animal et l'attribuer à la variable animal. De cette manière, le type non-interface peut être attribué avec succès au type interface{}.

Pour résumer, lorsque l'erreur de type non-interface ne peut pas être attribuée à l'interface{} se produit dans Golang, nous devons utiliser des assertions de type pour convertir le type non-interface en type d'interface, puis l'attribuer. De cette façon, nous pouvons résoudre le problème et poursuivre la programmation et le développement normalement. J'espère que les solutions proposées dans cet article pourront vous aider.

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