Given the code bellow, I'm trying to keep my packages completely separated, without knowing each other, but the code doesn't work. I just can get it running when I define (or use) an interface from one package inside code of the other package. Here is the error:
*cannot use client (variable of type *a.Client) as b.GetChilder value in struct literal: *a.Client does not implement b.GetChilder (wrong type for method GetChild) have GetChild() *a.Child want GetChild() b.GetDataercompilerInvalidIfaceAssign <https://pkg.go.dev/golang.org/x/tools/internal/typesinternal#InvalidIfaceAssign>* package a // file: a/a.go import "fmt" type Client struct{} func (c *Client) GetChild() *Child { return &Child{} } type Child struct{} func (c *Child) GetData() { fmt.Println("from GetData") } package b // file: b/b.go type GetDataer interface { GetData() } type GetChilder interface { GetChild() GetDataer } type Processor struct { Client GetChilder } func (p *Processor) Process() { card := p.Client.GetChild() card.GetData() } package main // file: main.go import ( "interfaces/a" "interfaces/b" ) func main() { client := &a.Client{} processor := &b.Processor{ Client: client, } processor.Process() } Why this doens't work? Some kind of limitation on interfaces usage? How is the best approach (idiomatic golang) to tacke this kind of problem? -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/41be202c-f205-4adf-aecc-0f8e681e2490n%40googlegroups.com.