Re: [go-nuts] Pointer to the loop variable
Then turn vo into a Vertex variable, not a pointer var vp Vertex = Vertex{} ... if v.X == 3 { vp = v } …. This time vp will be a copy of v, Maybe you have to give some known values and exceptional case for your domain, I mean, vp Vertex = { -1, -1} or any values your are positive does not exists because maybe {0,0} is good data. HTH PS: You can break nested loops from an inside loop using break [label] El martes, 10 de septiembre de 2019, 14:29:50 (UTC-5), Tong Sun escribió: > > > > On Tuesday, September 10, 2019 at 3:18:47 PM UTC-4, burak serdar wrote: >> >> On Tue, Sep 10, 2019 at 1:13 PM Tong Sun 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 = >> > } >> > } >> > 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: >> > > I can't break the loop immediately as my not-minimized real program use a > double loop to find the *closest *item. That's the reason I using the > pointer to track my finding... > > if v.x==3 { >>t:=v >>vp= >> } >> > > OK. will do that. thx > > > >> > - 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 golan...@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/839a129d-2dcf-4bac-846f-a0fc3e891ed4%40googlegroups.com.
Re: [go-nuts] Pointer to the loop variable
On Tuesday, September 10, 2019 at 3:18:47 PM UTC-4, burak serdar wrote: > > On Tue, Sep 10, 2019 at 1:13 PM Tong Sun > > 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 = > > } > > } > > 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: > I can't break the loop immediately as my not-minimized real program use a double loop to find the *closest *item. That's the reason I using the pointer to track my finding... if v.x==3 { >t:=v >vp= > } > OK. will do that. thx > > > - 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 golan...@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/6d0d6a78-fe02-445c-bacd-29b205e05175%40googlegroups.com.
[go-nuts] Pointer to the loop variable
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 = } } 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/143205c1-2c86-4404-94d2-4182a6285e21%40googlegroups.com.