Hi gophers,
I was playing around with a puzzle trying to break the sync package and
found something cool. Can you think of a definition for f that causes
once.Do to execute the argument more than once?
package main
import (
"sync"
)
func main() {
var once sync.Once
var f = // ...
once.Do(f)
}
HIGHLIGHT BELOW FOR ANSWER
package main
import (
"fmt"
"sync"
)
func main() {
var once sync.Once
var f func()
times := 9
f = func() {
if times == 0 {
return
}
times--
fmt.Println("Called")
oldonce := once
*&once = sync.Once{}
once.Do(f)
once = oldonce
}
once.Do(f)
}
HIGHLIGHT ABOVE FOR ANSWER
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.