In practice you never declare the same interface twice
switch from one to the other. Why would anybody declare
his own ResonseWriter interface if net/http.ResponseWriter
exists?
So yes: Using a type alias has advantages, but no, this
advantage is never realized because neither the alias nor
the plain type decl are used in practice.
V.
On Tuesday, 8 September 2020 at 10:13:23 UTC+2 Javier Zunzunegui wrote:
> TLDR: Why should I NOT the alias form `type ... = interface {...}` instead
> of the standard `type ... interface {...}` for interface declarations?
>
> The extended question:
>
> The normal type definition for an interface in go would be `type TypeName
> interface {...}`. This results in a new type, which is assignable to other
> types of the similar interfacce, such that this is valid:
> ```
> type I1 interface{ Foo() }
> type I2 interface{ Foo() }
> var _ I1 = I2(nil)
> ```
> But these are different types, such that any function with one of these in
> the signature can't be converted to a similar function with the other, such
> that this is NOT valid:
> ```
> var _ func(I1) = (func(I2))(nil)
> ```
>
> Declare the types as aliases <https://yourbasic.org/golang/type-alias/>
> however,
> and the limitation dissapears:
> ```
> type I1 interface{ Foo() }
> type I2 interface{ Foo() }
> var _ I1 = I2(nil) // still valid
> var _ func(I1) = (func(I2))(nil) // now valid
> ```
>
> A runnable example of the below using `http.ResponseWriter`:
>
> - without alias <https://play.golang.org/p/dKdh80LNMt0>
> - with alias <https://play.golang.org/p/sR5hB0ParA0>
>
> My point being using aliases offers an advantage (more flexible assignment
> and interface implementation) and to my knowledge no meaningful drawback.
> So why not use it everywhere?
>
--
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/d3fd66bc-6732-451f-b563-e780ab9570c0n%40googlegroups.com.