Pourquoi je ne peux pas appeler une interface avec une collection de méthodes à partir du paquet principal

0

La question

Je suis vraiment nouveau dans golang et je suis en train de voir comment l'encapsulation fonctionne vraiment en aller.

- Je avoir la structure suivante

-- package a
    -a_core.go
    -a.go
    -models.go

-- main.go

Dans les modèles.aller j'ai les structures de la demande et des réponses pour un appel d'api,

un.aller a un vide struct, qui est privé et public de l'interface, que je tiens à exposer avec différentes méthodes

a_core.aller juste un peu de logique métier qui serait appelé dans mon interface de mise en œuvre

Ensuite, j'ai une main.aller où je viens d'appeler l'interface publique.

code dans un.aller

package a

type myFunction struct{}

type MyFunc interface {
 Create(myData *MyData) (*MyData, error)
 Fetch(test string)
 Delete(test string)
}

//Concrete implementations that can be accessed publicly
func (a *myFunction) Create(data *MyData) (*MyData, error) {
  return nil, nil   
}

func (a *myFunction) Fetch(test string) {

}

func (a *myFunction) Delete(test string) {

}

Dans la principale.allez, j'appelle l'interface de mon premier créer la MyData pointeur avec des valeurs

data := &a.MyData{
 /////
}

result, err := a.MyFunc.Create(data)

J'obtiens l'erreur suivante quand je fais cela,

trop peu d'arguments dans l'appel à une.MyFunc.Créer

ne peut pas utiliser les données (variable de type *un.MyData) comme une.Mafonction valeur en argument à une.MyFunc.Créer: méthode manquante CreatecompilerInvalidIfaceAssign

Merci de ce que je fais mal?

go interface struct visual-studio-code
2021-11-20 22:23:03
1

La meilleure réponse

1

Voici un exemple
Notez que les noms en majuscules sont publiques, en minuscules privé (voir https://tour.golang.org/basics/3 )

./allez-exemple/main.aller

package main

import "go-example/animal"

func main() {
    var a animal.Animal
    a = animal.Lion{Age: 10}
    a.Breathe()
    a.Walk()
}

./allez-exemple/animal/animal.aller

package animal

import "fmt"

type Animal interface {
    Breathe()
    Walk()
}

type Lion struct {
    Age int
}

func (l Lion) Breathe() {
    fmt.Println("Lion breathes")
}

func (l Lion) Walk() {
    fmt.Println("Lion walk")
}
2021-11-20 23:23:09

Je suis en train de faire référence à ce à partir d'un package différent. Donc, pourquoi je dois faire un paquet.nom_interface.methodname et les méthodes sont déjà mises en œuvre sur le vide struct myFunction
gbubemi smith

mise à jour de ma réponse
Michael D.

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................