'Cause this dependency makes code more "rigid". A refactor in an isolated
package would let to change other packages. Also makes testing more
difficult.
It is kind of described here:
https://go.dev/wiki/CodeReviewComments#interfaces

Em qua., 13 de mar. de 2024 às 13:41, burak serdar <bser...@computer.org>
escreveu:

> 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 a topic in the
> Google Groups "golang-nuts" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/golang-nuts/E9EwsXSKg74/unsubscribe.
> To unsubscribe from this group and all its topics, 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
> .
>


-- 
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/CAEwyvWF%2Bfo7hjSYpO6%2BbmLuwF-3k1KX9cF0XU4nNt%3DhJ7n%2Bbjw%40mail.gmail.com.

Reply via email to