On Wed, Oct 9, 2019 at 5:48 PM 'Axel Wagner' via golang-nuts
<[email protected]> wrote:
>
> There's loads of precedence in the stdlib:
>
> https://godoc.org/net/http/#FileSystem.Open
> https://godoc.org/net/http#File.Stat
> https://godoc.org/net#Conn.LocalAddr
> https://godoc.org/database/sql/driver/#Driver.Open
> https://godoc.org/image#Image.ColorModel
> https://godoc.org/reflect/#Type.Elem
> And don't forget that error itself is an interface.
>
> Honestly, if you need it, go for it. There are definitely places where it's
> over abstraction to do it, but I don't think there's a good or universal rule
> you can use to decide which is which.
>
> FWIW, I tend to disagree with the "return structs, accept interfaces" advise
> in general. If go had variant func/methods, that would be useful guidance.
> But as it stands, it is too often necessary to violate it (every usage of an
> error return value is in fact such a violation). And the "accept interfaces"
> part tends to lead to over abstraction (I would probably agree with "consider
> accepting interfaces if they already exist" though).
There is one point you need to remember when returning interfaces:
make sure you handle nil correctly:
type S struct {}
type I interface {}
func f() *S {
return nil
}
func g() I {
x:=f()
return x
}
Above, g() is not nil. The correct code would be:
func g(() I {
x:=f()
if x==nil {
return nil
}
return x
}
>
> On Wed, Oct 9, 2019 at 9:39 AM Martin Palma <[email protected]> wrote:
>>
>> I'm wondering If it is ok (or good Go code) if an interface method returns
>> an other interface? Here an example:
>>
>> type Querier interface {
>> Query() string
>> }
>>
>> type Decoder interface {
>> DecodeAndValidate() Querier
>> }
>>
>>
>> --
>> 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 [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/golang-nuts/531f29a6-ea2e-4416-a0d0-ce697dc7a09b%40googlegroups.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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/CAEkBMfHHtn5t3TZOCG4xA_3kVbNqY2_xo7EtHoLyhi6P28ku9g%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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/CAMV2Rqp-n0UaxQVpPVgJKayNzY6Voe5QRL4n7MoqmQMavL3oiQ%40mail.gmail.com.