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.

Reply via email to