Slide 15
Slide 15 text
golang.org/x/sync/singleflight
https://play.golang.org/p/h_lCoqJDp9s
package main
import (
"fmt"
"sync"
"time"
"golang.org/x/sync/singleflight"
)
func main() {
var (
sg singleflight.Group
wg sync.WaitGroup
)
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
// "key" ͝ͱʹಉ࣮࣌ߦΛߜΔ
now, _, shared := sg.Do("key", func() (interface{}, error) {
time.Sleep(time.Millisecond * 100)
return time.Now(), nil
})
fmt.Printf("%v: shared: %t\n", now, shared)
wg.Done()
}()
}
wg.Wait()
}