Използвам for range
цикъл в Go, за да итерирам през част от структури.
Във всеки цикъл аз указател към текущия елемент към променлива.
Объркан съм защо показалецът променя стойността си в следващия цикъл.
Например този код:
package main
import "fmt"
type t struct {
val int
}
func main() {
l := []t{{1}, {2}}
var p *t
for _, i := range l {
fmt.Println("begin", p)
p = &i
fmt.Println("end", p)
}
}
Очаквам да произведа:
begin <nil>
end &{1}
begin &{1}
end &{2}
Но всъщност прави:
begin <nil>
end &{1}
begin &{2}
end &{2}
За справка, в моя действителен код, аз проверявам за условие по време на цикъла и връщам текущия елемент и предишния. Така че се опитвам да запазя указател към него, така че в следващата итерация да има достъп и до предишния.
for
копира текущия елемент отl
вi
. - person Tim Cooper   schedule 04.09.2015i
основно за всички повторения? Мисля, че това има смисъл. Как бих запазил указател към действителния обект тогава, ако съм в своя цикъл? - person saul.shanabrook   schedule 04.09.2015