I think you should clarify that this is because T *only* contains pointers. If T were:
type T struct { i int p *int } then it would suddenly become non-reference type, as defined in this thread, as a change to i will not be noticed by other copies of a given T. -Paul On Fri, Oct 21, 2016 at 8:20 AM, 'Alan Donovan' via golang-nuts < golang-nuts@googlegroups.com> wrote: > On 21 October 2016 at 11:15, T L <tapir....@gmail.com> wrote: >> >> On Friday, October 21, 2016 at 10:01:43 PM UTC+8, Ian Lance Taylor wrote: >>> >>> On Fri, Oct 21, 2016 at 6:52 AM, Henrik Johansson <dahan...@gmail.com> >>> wrote: >>> > The confusion I have had is rather with nilability. >>> > A channel can be nil even though it is not explicitly a pointer. >>> >>> It's a basic design decision in Go that every type has a zero value. >>> For the "reference types" (pointer, channel, map, slice, interface) >>> that zero value is named "nil". >>> >> >> I have a question, should the following type be called reference type? >> >> type T struct { >> p *int >> } >> > > By the definition I gave, yes, because an instance of T contains a > reference to an int variable. All copies of a given T value share the same > int variable, and a change to that variable by any one will be observed by > all the others. > > -- > 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. > For more options, visit https://groups.google.com/d/optout. > -- 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. For more options, visit https://groups.google.com/d/optout.