Neden ana paketten bir yöntem koleksiyonuna sahip bir arabirim arayamıyorum

0

Soru

Golang'da gerçekten yeniyim ve kapsüllemenin go'da gerçekten nasıl çalıştığını görmeye çalışıyorum.

Aşağıdaki yapıya sahibim

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

-- main.go

İçinde modeller.git Bir apı çağrısı için istek ve yanıtlar için yapılarım var,

a. go, çeşitli yöntemlerle ortaya çıkarmak istediğim özel ve genel bir arayüz olan boş bir yapıya sahiptir

çekirdek.go'nun arayüz uygulamamda çağrılacak bazı iş mantığı var

O zaman, benim bir anayolum var.kamu arayüzü dediğim yere git.

kod a'da. git

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

}

Ana bölümde.git, arayüzü ilk önce MyData işaretçisini değerlerle oluşturuyorum

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

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

Bunu yaparken aşağıdaki hatayı alıyorum,

bir. MyFunc çağrısı için çok az argüman var.Yaratmak

veri (değişken türü *a.MyData) bağımsız değişkeninde a.MyFunc değeri olarak a.MyFunc için kullanılamaz.Oluştur: eksik yöntem CreatecompilerInvalidİfaceAssign

Lütfen neyi yanlış yapıyorum?

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

En iyi cevabı

1

İşte bir örnek
Büyük harfli adların herkese açık, küçük harfli özel olduğunu unutmayın (bkz .https://tour.golang.org/basics/3 )

./go-örnek / ana.gitmek

package main

import "go-example/animal"

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

./ go-örnek / hayvan/hayvan.gitmek

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

Bunu farklı bir paketten referans almaya çalışıyorum. Bu yüzden neden bir paket yapmam gerekiyor.arayüzadı.methodname ve yöntemler zaten boş struct myFunction üzerinde uygulanmaktadır
gbubemi smith

cevabımı güncelledim
Michael D.

Diğer dillerde

Bu sayfa diğer dillerde

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