vp is taking the address of v, so when the loop ends, v is the last element in the slide and therefore *vp is {0,0} Add a break to the condition when you assign vp, say
if v.X == 3 { vp = &v break } HTH, Yamil El martes, 10 de septiembre de 2019, 14:13:40 (UTC-5), Tong Sun escribió: > > 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. > > - 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/14f9f238-c366-4cde-8228-ecc13added04%40googlegroups.com.