Prečo nemôžem zavolať rozhranie s kolekcia metód z hlavného balíka

0

Otázka

Som naozaj nový golang a snažím sa vidieť, ako zapuzdrenie naozaj funguje v go.

Mám tieto štruktúry

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

-- main.go

V modely.prejdite som structs pre žiadosti a odpovede na volanie api,

a.prejdite má prázdnu struct, čo je súkromné a verejné rozhranie, ktoré chcem oboznámiť s rôznymi metódami

a_core.ísť len má niektoré obchodnej logiky, ktorý by sa volal môj rozhranie vykonávanie

Potom som to hlavné.ísť tam, kde som stačí zavolať na verejné rozhranie.

kód v je.ísť

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

}

V hlavnej.choď, ja volám rozhranie môj prvý vytvoriť MyData ukazovateľ s hodnotami

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

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

Som dostať nasledujúce chybové hlásenie, keď sa mi to,

príliš málo argumentov v zavolať.MyFunc.Vytvoriť

nemôže používať údaje (premennú typu *a.MyData) ako.MyFunc hodnotu argument na.MyFunc.Vytvoriť: chýba metóda CreatecompilerInvalidIfaceAssign

Prosím, čo robím zle?

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

Najlepšiu odpoveď

1

Tu je príklad
Všimnite si, že názvy veľkých sú verejné, malé súkromné (pozri https://tour.golang.org/basics/3 )

./go-príklad/main.ísť

package main

import "go-example/animal"

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

./go-príklad/zviera/zviera.ísť

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

Snažím sa referenčné to z rôznych balíka. Teda, prečo mám balíka.interfacename.methodname a metód, ktoré sú už realizované na prázdne struct myFunction
gbubemi smith

aktualizované moja odpoveď
Michael D.

V iných jazykoch

Táto stránka je v iných jazykoch

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