& 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.