On Tue, Sep 10, 2019 at 1:13 PM Tong Sun <suntong...@gmail.com> wrote:
>
> I'm experiencing a weird problem with my program and finally nail it down to 
> what exactly went wrong, so that I can write a minimum program to duplicate 
> it. See the following program:
>
> package main
>
>
> import (
>  "fmt"
> )
>
>
> type Vertex struct {
>  X int
>  Y int
> }
>
>
> func main() {
>  vs := []Vertex{
>  Vertex{1, 2}, // has type Vertex
>  Vertex{X: 3}, // Y:0 is implicit
>  Vertex{},     // X:0 and Y:0
>  }
>
>
>  fmt.Printf("Vertex Slice %+v\n", vs)
>  var vp *Vertex = nil
>  for _, v := range vs {
>  if v.X == 3 {
>  vp = &v
>  }
>  }
>  fmt.Printf("Found: %+v\n", vp)
> }
>
>
> https://play.golang.org/p/R645C5plojx
>
> I was expecting that the found Vertex is "v.X == 3", however the result is 
> not.

Because you're keeping a pointer to the loop variable. v continues
changing after you store the address of it, so you get the latest
value of v. Instead, save a copy of v, or break the loop as soon as
what you're looking for is found:

if v.x==3 {
   t:=v
   vp=&t
}

>
> - what exactly is causing the problem?
> - how to fix it so that I got what I was looking for?
>
> Again, the snip is at
> https://play.golang.org/p/R645C5plojx
>
> Thanks
>
> --
> 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.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/143205c1-2c86-4404-94d2-4182a6285e21%40googlegroups.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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAMV2Rqph_NFZhASkHFMAPMuLByBRL5-4w1amYPAFYqVDROpRoQ%40mail.gmail.com.

Reply via email to