sync의 Once 를 활용하여 go 싱글톤을 구현합니다.
https://golang.org/pkg/sync/#Once
code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   | package unit
  import "sync"
 
  var instance *Component var once sync.Once
  type Component struct {     count int }
  func GetInstance() *Component {     once.Do(func() {         instance = &Component{count: 0}     })     return instance }
  func (s *Component) add() {     s.count++ }
  func (s *Component) getCount() int {     return s.count }
   | 
 
test code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   | package test
  import (     "fmt"     "testing" )
  func TestGetInstance(t *testing.T) {     GetInstance().add()     fmt.Println(GetInstance().getCount())
      GetInstance().add()     fmt.Println(GetInstance().getCount())
      GetInstance().add()     fmt.Println(GetInstance().getCount()) }
   | 
 
실행 결과
1 2 3 4 5 6
   | D:\repository\singleton_test\test>go test 1 2 3 PASS ok      _/D_/repository/singleton_test/test     0.171s
   |