On Wed, Mar 13, 2024 at 10:31 AM Rodrigo Araujo <yol...@gmail.com> wrote:
>
> 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.

Why would it not be a good approach? You have a package declaring
interfaces, and if you have another package using those interfaces,
you import the first package in the second. Placing common interfaces
in a package everyone else imports is a common way to deal with this
problem.


>
> 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
>>>
>>> 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.
>
>
>
> --
> 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.

-- 
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/CAMV2Rqr6PmqU%2BHNaNwW8fOZrv6SZw7cf2pacoR_tzvd3hd0MDA%40mail.gmail.com.

Reply via email to