& turns a value into a pointer. * turns a pointer into a value.

Whether a pointer should be declared with & or * or "ptr" or anything else
is an arbitrary decision made the way it was by the Go designers because,
as Ian says, C did it with *.

-rob


On Mon, Mar 11, 2019 at 10:22 AM Michael Jones <michael.jo...@gmail.com>
wrote:

> If you consider lv and rv in BCPL, and see how that becomes * and & in B
> and stays that way in C/C++/... it may be more clear.
>
> The C declaration syntax was revolutionary for being inside out. “int *p”
> really means “p is the type of variable where *p means an int.” Your
> argument seems right, in the outside in order of most every non-C language,
> we are saying “var p X” where X should mean “address of an int” and that
> is, as you say, “& int”
>
> The installed base of programmers expects it the other way, though. 🙂
>
> On Sun, Mar 10, 2019 at 9:18 AM 박민우 <minwoo33p...@gmail.com> wrote:
>
>> Thank you for the explanation!
>>
>> and sorry for the typo,
>> I meant to say something like,
>> someInteger := 0
>> q := &someInteger
>> or
>> q := &SomeStructure{}
>> as an example of & symbol as "pointer to".
>>
>> Anyway, I would say C's declaration syntax
>> int *p
>> makes more sense because *p , "where p points to", is int.
>> However, it also makes sense to use the same asterisk for pointer
>> declaration.
>> Thank you for mentioning creation of other types too,
>> It really helped me get over it ! :)
>> I believe I just need some getting used to !
>>
>>
>>
>> 2019년 3월 10일 일요일 오후 11시 46분 13초 UTC+9, Ian Lance Taylor 님의 말:
>>
>>> On Sun, Mar 10, 2019 at 7:41 AM 박민우 <minwoo...@gmail.com> wrote:
>>> >
>>> > I am new to Go and I have read Go;s-declaration-syntax documentation.
>>> >
>>> > It states that:
>>> >
>>> > p: pointer to int
>>> >
>>> > Would be written as:
>>> > p *int
>>> >
>>> > However, other than declaration syntax, "&" is the symbol for "the
>>> pointer to" like,
>>> > q := &int
>>> > The above code would be the same as:
>>> > var q *int
>>> > q = new(int)
>>> > So, I would suggest,
>>> > var q &int
>>> > to be more consistent, but Go's syntax wouldn't permit this.
>>> >
>>> > Is there a reason behind this decision?
>>> > I will get used to the syntax after a while, but in need of some
>>> reasonable explanation.
>>>
>>> The reason boils down to: this is how it is done in C.  A pointer type
>>> is written as *int.  A pointer variable q is dereferenced as *q.  That
>>> is also what C looks like.
>>>
>>> Note that in Go there is no particular correspondence between the way
>>> that a type is written and the way that a value of that type is
>>> created. A map or chan type is created using the builtin function
>>> make, or using a composite literal.  An int type is created by
>>> declaration, or implicitly.  A slice type can be created by using a
>>> slice expression on an array value.  The consistency you suggest just
>>> doesn't exist for Go.
>>>
>>> Ian
>>>
>> --
>> 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.
>>
> --
>
> *Michael T. jonesmichael.jo...@gmail.com <michael.jo...@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 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.

Reply via email to