只执行一次,线程安全,适合用来实现单例
/** * @Author: miguel.hou * @Date: 2020/9/11 */ package main import ( "fmt" "sync" ) type DemoService struct { } var demoService *DemoService var demoServiceOnce sync.Once func getDemoService() *DemoService { fmt.Println("getDemoService .....") demoServiceOnce.Do(func() { fmt.Print("init service") demoService = &DemoService{} }) return demoService } func main() { for i := 1; i < 10; i++ { demoService = getDemoService() } } 输出
getDemoService .....
init servicegetDemoService .....
getDemoService .....
getDemoService .....
getDemoService .....
getDemoService .....
getDemoService .....
getDemoService .....
getDemoService .....
```