Proč nemůžu zavolat rozhraní s souboru metod z hlavního balíčku

0

Otázka

Jsem opravdu nový golang a já se snažím vidět, jak zapouzdření opravdu funguje v go.

Mám následující strukturu

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

-- main.go

V modely.šel jsem structs pro žádosti a odpovědi na volání api,

a.jít má prázdný struct, které je soukromé a veřejné rozhraní, které chci vystavit s různými metodami

a_core.jít jen má některé obchodní logiky, který by volal v mé implementace rozhraní

Pak mám hlavní.jít tam, kde jsem jen zavolat na veřejné rozhraní.

kód v.jít

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 hlavní.jít, zavolám rozhraní moje první vytvořit MyData ukazatele s hodnotami

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

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

Dostanu následující chybu, když jsem to udělat,

příliš málo argumentů ve volání.MyFunc.Vytvořit

nelze použít data (proměnné typu *.MyData).MyFunc hodnota v argumentu.MyFunc.Vytvořit: chybí metoda CreatecompilerInvalidIfaceAssign

Prosím co dělám špatně?

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

Nejlepší odpověď

1

Zde je příklad
Všimněte si, že názvy na velká písmena jsou veřejné, v malé soukromé (viz https://tour.golang.org/basics/3 )

./go-example/main.jít

package main

import "go-example/animal"

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

./go-příklad/zvíře/zvíře.jít

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 odkazovat se na to z jiného balíčku. Tedy, proč to musím udělat balíček.název_rozhraní.methodname a metody, které jsou již realizovány na prázdné struct mojefunkce
gbubemi smith

aktualizováno moje odpověď
Michael D.

V jiných jazycích

Tato stránka je v jiných jazycích

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