Skip to content

Instantly share code, notes, and snippets.

@hayajo
Created May 7, 2014 06:22
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hayajo/a7c6f7aad8cd4ceaa79e to your computer and use it in GitHub Desktop.
Save hayajo/a7c6f7aad8cd4ceaa79e to your computer and use it in GitHub Desktop.
golangでsingleton
package main
import "sync"
type MySingleton struct {
}
var ch = make(chan bool, 1)
var s *MySingleton = nil
func GetMySingleton() *MySingleton {
ch <- true
defer func() {
<-ch
}()
if s == nil {
s = new(MySingleton)
}
return s
}
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
o := GetMySingleton()
wg.Done()
}()
}
wg.Wait()
}
@hayajo
Copy link
Author

hayajo commented May 7, 2014

goroutineを気にするとこんな感じなのかな。

sync.Onceつかう実装だとnilになった場合に再生成できないのでチャネル使った実装にしてみました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment