Por que não posso chamar de uma interface com um conjunto de métodos do pacote principal

0

Pergunta

Eu sou muito novo para golang e eu estou tentando ver como encapsulamento realmente funciona em ir.

Eu tenho a seguinte estrutura

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

-- main.go

Em modelos.vá eu ter estruturas para a solicitação e as respostas para uma chamada de api,

um.vá tem um vazio estrutura, que é privada e uma interface pública, o que eu quero expor com vários métodos

a_core.vá só tem alguma lógica de negócio que seria chamado na minha implementação de interface

Então, eu tenho um principal.ir onde eu apenas chamar a interface pública.

código em um.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) {

}

No principal.vá, eu chamo a interface do meu primeiro criar o MyData ponteiro com valores

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

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

Eu recebo o seguinte erro quando eu faço isso,

muito poucos argumentos na chamada para um.MyFunc.Criar

não é possível usar dados (variável do tipo *um.MyData) como um.MyFunc valor de argumento para um.MyFunc.Criar: falta de método CreatecompilerInvalidIfaceAssign

Por favor, o que estou fazendo de errado?

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

Melhor resposta

1

Aqui está um exemplo
Note que os nomes em maiúsculas são públicos, em letras minúsculas privado (ver https://tour.golang.org/basics/3 )

./go-exemplo/principal.ir

package main

import "go-example/animal"

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

./go-exemplo/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

Eu estou tentando fazer referência a isso de um pacote diferente. Por isso, por que eu tenho que fazer um pacote.interfacename.methodname e os métodos já estão implementadas no vazio estrutura myFunction
gbubemi smith

actualizado a minha resposta
Michael D.

Em outros idiomas

Esta página está em outros idiomas

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