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