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.

Reply via email to