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.