ทำไมฉันไม่สามารถเรียกเป็นส่วนติดต่อกับคลังภาพของวิธีการของจากหลักของแพ็กเกจ

0

คำถาม

ผมใหม่เพื่อ golang และฉันกำลังพยายามที่จะเห็นว่า encapsulation จริงๆทำงานอยู่ในองไปแล้ว

ฉันต้องต่อไปนี้โครงสร้าง

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

-- main.go

อยู่ กับพวกนางแบบไป ฉันต้อง structs สำหรับการร้องของและฟื้นคืนชีพเป็นรูปแบบ api โทรศัพท์

เป็น.ไป มีที่ว่างเปล่า struct ซึ่งเป็นส่วนตัวและเป็นการส่วนเชื่อมต่อซึ่งฉันต้องการจะเปิดเผยเรื่องกับวิธีการต่างๆ

a_core.ไป แค่มีมีธุระบางอย่างตรรกะที่จะเรียกของฉันส่วนติดต่อ implementation

งั้น,ฉันมี หลัก.ไป อยู่ไหนฉันเพิ่งโทรเรียกส่วนติดต่อสาธารณะ.

รหัสใน.อไป

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

}

ในหลัก.ไปฉันจะโทรเรียกส่วนติดต่อของฉันก่อสร้าง MyData pointer กับค่า

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

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

ฉันเอาตามข้อผิดพลาดตอนที่ฉันทำอย่างนี้

เหมือนกันไม่กี่อาร์กิวเมนต์หนึ่งตัวอยู่ในโทรหาเพื่อนMyFunc.สร้าง

ไม่สามารถใช้ข้อมูล(ตัวแปรประเภท*น.MyData)เป็น.MyFunc ค่าในข้อโต้แย้งจะเป็น.MyFunc.สร้าง:หายไปวิธีการ CreatecompilerInvalidIfaceAssign

ได้โปรดฉันทำอะไรผิดเหรอ?

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

คำตอบที่ดีที่สุด

1

นี่คือเป็นตัวอย่าง
โปรดจำไว้ว่ารายชื่ออยู่ในอักษรตัวพิมพ์ใหญ่เป็นสาธารณะอยู่ในตัวอักษรตัวพิมพ์เล็กส่วนตัว(ดู https://tour.golang.org/basics/3 )

./ไป-ตัวอย่างเช่น/หลัก.อไป

package main

import "go-example/animal"

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

./ไป-ตัวอย่างเช่น/สัตว์/สัตว์อไป

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

ฉันกำลังพยายามอ้างอิงถึงเรื่องนี้จากที่แตกต่างกันแพ็คเก็จฉันทำอยู่บ่อยๆ นี่แหละทำไมฉันต้องทำเป็นแพ็คเก็จฉันทำอยู่บ่อยๆinterfacename.methodname และวิธีการของอยู่แล้วการจัดเตรียมไว้อยู่ที่ว่างเปล่า struct myFunction
gbubemi smith

ปรับปรุงคำตอบของฉัน
Michael D.

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่