¿Por qué no puedo llamar a una interfaz con una colección de métodos del paquete principal

0

Pregunta

Soy realmente nuevo en golang y estoy tratando de ver cómo la encapsulación realmente funciona en ir.

Tengo la siguiente estructura

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

-- main.go

En los modelos.vaya he estructuras para la solicitud y las respuestas para una llamada a la api,

una.ir ha un vacío de la estructura, que es privada y una interfaz pública, lo que quiero exponer con varios métodos

a_core.ir solo tiene algo de lógica de negocios que sería llamado en mi interfaz de la aplicación

Entonces, tengo una principal.ir de donde acabo de llamar a la interfaz pública.

código en un.ir

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

}

En principal.vaya, yo llame a la interfaz de mi primera crear el MyData puntero con valores

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

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

Me sale el siguiente error cuando hago esto,

muy pocos argumentos en la llamada a una.Mifunc.Crear

no puede utilizar los datos (variable de tipo *a.MyData) como un.MyFunc valor de argumento a una.Mifunc.Crear: falta de método CreatecompilerInvalidIfaceAssign

Por favor, ¿qué estoy haciendo mal?

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

Mejor respuesta

1

Aquí es un ejemplo
Tenga en cuenta que los nombres en mayúsculas son de carácter público, en minúsculas privado (ver https://tour.golang.org/basics/3 )

./ir-ejemplo/main.ir

package main

import "go-example/animal"

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

./ir-ejemplo/animal/animal.ir

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

Estoy tratando de referencia de un paquete diferente. Por lo tanto, ¿por qué me tienes que hacer un paquete.nombredeinterfaz.methodname y los métodos que ya están en marcha en el vacío struct myFunction
gbubemi smith

actualizado mi respuesta
Michael D.

En otros idiomas

Esta página está en otros idiomas

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