Go语言中单例模式once.Do只执行一次

匿名 (未验证) 提交于 2019-12-02 23:47:01
package singleton  import (     "unsafe"     "fmt"     "sync"     "testing" )  //协程安全 单例模式 type Singleton struct { }  var singleintance *Singleton var once sync.Once  //只执行一次 func GetSingletonObj() *Singleton {     once.Do(func() {         fmt.Println("Create Obj")         singleintance = new(Singleton)     })     return singleintance }  func TestGetSingletonObj(t *testing.T) {     var wg sync.WaitGroup //协程安全     for i := 0; i < 10; i++ {         wg.Add(1)         go func() {             obj := GetSingletonObj()             fmt.Printf("%x\n",unsafe.Pointer(obj))//输出的结果都是同一个地址             wg.Done()         }()     }     wg.Wait() //等待是有协程运行完成 }

使用noce.Do调用时方法内执行代码只执行一次。

输出结果:

Create Obj

6c7df8
6c7df8
6c7df8
6c7df8
6c7df8
6c7df8
6c7df8
6c7df8

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!