Perché non posso chiamare un'interfaccia con una collezione di metodi dal pacchetto principale

0

Domanda

Io sono di veramente nuovo per golang e sto cercando di capire come incapsulamento funziona davvero in go.

Ho la seguente struttura

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

-- main.go

In modelli.andare ho struct per la richiesta e le risposte per una chiamata api,

un.vai ha una struttura vuota, che è privato e di un'interfaccia pubblica, che voglio esporre con vari metodi

a_core.andare solo la logica di business che sarebbe stato chiamato nella mia implementazione dell'interfaccia

Allora, io ho un principale.andare dove ho appena chiamata l'interfaccia pubblica.

codice in un.andare

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

}

In main.andare, chiamo l'interfaccia mia prima creare il MyData puntatore con valori

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

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

Ho il seguente errore quando faccio questo,

troppo pochi argomenti nella chiamata a un.MyFunc.Creare

non è possibile utilizzare i dati (variabili di tipo *a.MyData) come.MyFunc valore in argomento.MyFunc.Creare: manca il metodo CreatecompilerInvalidIfaceAssign

Si prega di cosa sto facendo di sbagliato?

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

Migliore risposta

1

Qui è un esempio
Si noti che i nomi in maiuscolo sono pubblici, in minuscolo privato (vedi https://tour.golang.org/basics/3 )

./go-esempio/main.andare

package main

import "go-example/animal"

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

./go-esempio/animale/animale.andare

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

Sto cercando di fare riferimento a questo da un altro pacchetto. Quindi, perché devo fare un pacchetto.nomeinterfaccia.methodname e i metodi sono già implementato sulla struttura vuota myFunction
gbubemi smith

aggiornata la mia risposta
Michael D.

In altre lingue

Questa pagina è in altre lingue

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