The first change forces a variable definition to reallocate a new memory slot to avoid corrupting a previously defined one in a loop block. The second change ensures that the frame clone operations obtains a copy of the original data slice, to preserve the original context set in a loop. Fixes #1035.
45 lines
578 B
Go
45 lines
578 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
period = 100 * time.Millisecond
|
|
precision = 7 * time.Millisecond
|
|
)
|
|
|
|
func main() {
|
|
counter := 0
|
|
p := time.Now()
|
|
ticker := time.NewTicker(period)
|
|
ch := make(chan int)
|
|
|
|
go func() {
|
|
for i := 0; i < 3; i++ {
|
|
select {
|
|
case t := <-ticker.C:
|
|
counter = counter + 1
|
|
ch <- counter
|
|
if d := t.Sub(p) - period; d < -precision || d > precision {
|
|
fmt.Println("wrong delay", d)
|
|
}
|
|
p = t
|
|
}
|
|
}
|
|
ch <- 0
|
|
}()
|
|
for c := range ch {
|
|
if c == 0 {
|
|
break
|
|
}
|
|
println(c)
|
|
}
|
|
}
|
|
|
|
// Output:
|
|
// 1
|
|
// 2
|
|
// 3
|