With fmt you can print the pointer with %p. I like it better than the C way of . for value, and -> for the dereference shortcut instead of (*thing).field. Along with struct embedding I've had cases where C-like types act with object oriented level readability because of this Go feature.
Matt On Sunday, December 17, 2017 at 11:03:45 PM UTC-6, Jeff Goldberg wrote: > > > On Sunday, December 17, 2017 at 2:32:24 PM UTC-6, jlfo...@berkeley.edu > wrote: > >> >> Here's something that someone new to Go might run up against. I know I did. >> >> > Me, too! > > The trivial program below, derived from "The Go Programming Language" >> book, shows two methods that differ only in the way they treat their >> receiver. In the first, the receiver is a pointer to a slice, and in the >> second, the receiver is a slice. So far so good. What confused me is >> that both methods return the same result even when called the same way. >> I would have expected only one of the methods to work. >> >> > I never really figured out what was going on, but I finally just accepted > it as "go is doing > what I want it to do, even if I say it wrong." > > Here's what I believe is the explanation. The book says (slightly >> edited) "If the receiver p is a variable of type Path but the method >> requires a *Path receiver, we can use this shorthand: >> >> p.pr1() >> >> and the compiler will perform an implicit &p on the variable.". This >> explains what happens when pr1() is called. >> >> > Right. I guess this all works because there are so few things you can do > with pointers; so this > isn't going to create odd ambiguities. > > >> I'm surprised that Go would include this implicit behavior because type >> conversions are generally required to be explicit. >> >> > I agree that it seems un-Go-like initially. But the more I think about it, > the more it makes sense given > other restrictions on pointers. The only thing you can do with pointers is > pass them and > deferences them. You never actually do anything with the value of the > pointer itself. A type can have > methods, but a pointer to a type can't. So it's always(?) going to be safe > for the compiler to do this. > > Of course you don't want people using both forms within a local scope. So > that is my guess at > why the this "shortcut" is allowed only via receivers. > > I am, of course, speculating wildly. I would be pleased to be set straight > by the people who actually > know what is going on. > > And I pray to whatever is holy that I never take the habits I'm picking up > with this back to C. > > -j > -- 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.