----------------------------------singleton.go-------------------------------------------------
package singleton import ( "sync" "fmt" ) var ( once sync.Once instance *Singleton ) type Singleton struct { Flag string } func (self *Singleton) Hello() { fmt.Printf("saying hello from instance: %s\t\n",self.Flag) } //使用同步锁机制保证只执行一次 //懒汉模式 func GetInstance(flag string) *Singleton{ once.Do(func() { instance = &Singleton{flag} }) return instance }
----------------------------------singleton_test.go-------------------------------------------------
package singleton import ( "testing" "strconv" ) func TestGetInstance(t *testing.T) { for i := 0; i < 10; i++ { go func(flag string) { ins := GetInstance(flag) ins.Hello() }(strconv.Itoa(i)) } }