Do you mean b.GetChilder? In this case, package A will depend on package B and I don't think this is a good approach.
Em qua., 13 de mar. de 2024 às 11:28, Brian Hatfield <bmhatfi...@gmail.com> escreveu: > Client.GetChild() must return GetChilder, not Child. > > On Wed, Mar 13, 2024 at 10:02 AM Rodrigo Araujo <yol...@gmail.com> wrote: > >> 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 >> <https://groups.google.com/d/msgid/golang-nuts/41be202c-f205-4adf-aecc-0f8e681e2490n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- Att. ---------------------- Rodrigo Araujo ---------------------- -- 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/CAEwyvWHKZboz2KQvU7o_yneYhY31r3HBxqSQJw-B-vkuRvxHXw%40mail.gmail.com.