Je voudrais créer une structure de base qui doit avoir une méthode, je veux utiliser ces méthodes dans les substrats. Par exemple:Golang base struct pour définir des méthodes dans les substructures
type Base struct {
Type string `json:"$type"`
}
func (b Base) GetJSON() ([]byte, error) {
return json.Marshal(b)
}
func (b Base) SetType(typeStr string) interface{} {
b.Type = typeStr
return b
}
Dans la nouvelle struct je veux l'utiliser comme ceci:
type Auth struct {
Base
Username
Password
}
et appeler ces méthodes dans la principale:
func main() {
a := Auth{
Username: "Test",
Password: "test",
}
a = a.SetType("testtype").(Auth)
j, _ := a.GetJSON()
}
Dans le cas setType je suis arrivé une panique provoquée par l'interface {} n'est pas de type Auth
, elle est de type Base
. Dans le cas de GetJSON j'ai eu un json sur le type, mais seulement le type.
Y at-il une solution au problème que je veux résoudre?
'retour b.Type = typeStr' n'est pas une instruction valide Go. Base ne va pas avoir les champs "Nom d'utilisateur" et "Mot de passe" si c'est ce que vous essayez de faire. Il n'y a pas d'héritage dans Go. – JimB
Je recommanderais de repenser votre conception entièrement à partir d'une perspective Go. Go n'est pas un langage orienté objet. Il n'a pas d'héritage, et pas de polymorphisme au-delà des interfaces. – Adrian
Oui, je le sais, mais comment les gens résolvent le problème donné, je les ai tous structurés avec les mêmes méthodes, devrais-je les écrire à tous? – PumpkinSeed