On Fri, Nov 30, 2018 at 6:16 PM Mark Volkmann <r.mark.volkm...@gmail.com>
wrote:

> Will the Go compiler optimize the pointer dereference so it doesn't
happen in every loop iteration? If not, is it common practice to do that
outside the loop like this?
>
> myValue := *myPtr
> for _, v := range values {
>         fmt.Printf("%v %v\n", myValue, v)
> }

There's no pointer dereference inside the loop. But there's an allocation
inside the loop, on every iteration, that puts a pointer to a copy of
myValue into an interface{} that's passed to fmt.Printf. The allocation can
be probably avoided:

myValue := interface{}(*myPtr)
for _, v := range values {
        fmt.Printf("%v %v\n", myValue, v)
}

But the %v verb handle pointers in many cases well. If that holds for the
type of *myPtr then simply:

for _, v := range values {
        fmt.Printf("%v %v\n", myPtr, v)
}

is what could be good enough.

-- 

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

Reply via email to