hi there,
I am a bit confused by go/types and defined named types:
https://play.golang.org/p/izESp473jOq
the above link shows a program using the go/types package and shows how
the four types T0, T1, T2 and T3:
```
package p
type T0 struct { F int}
type T1 struct { T0 }
type T2 T1
type T3 T0
```
map to types defined in go/types:
T0: type p.T0 struct{F int} -- obj=*types.TypeName typ=*types.Named -- under=*types.Struct
T1: type p.T1 struct{p.T0} -- obj=*types.TypeName typ=*types.Named -- under=*types.Struct
T2: type p.T2 struct{p.T0} -- obj=*types.TypeName typ=*types.Named -- under=*types.Struct
T3: type p.T3 struct{F int} -- obj=*types.TypeName typ=*types.Named -- under=*types.Struct
how would I use go/types to differentiate between T1 and T2?
they are 2 named types whose underlying types are (eventually):
'struct { T0 }'
but, from the doc string of Type.Underlying:
```
// Underlying returns the underlying type of a type
// w/o following forwarding chains. Only used by
// client packages (here for backward-compatibility).
```
I was actually expecting to get:
- *types.Struct for t1.Underlying()
- *types.Named for t2.Underlying()
so: how could I differentiate between a named type that's defined from
another named type and one that's defined (directly) from a struct ?