我看到了兩種在 Go 中使用單例模式的方法。使用init()函數使用sync.Once同步包有什么區別,哪個在線程安全方面更好?如果init()解決了所有問題,那么它有什么sync.Once用呢?
1 回答

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
規范保證包init()
函數只被調用一次并且全部從單個線程調用(并不是說它們不能啟動 goroutines,但它們是線程安全的,除非你讓它們成為多線程)。
您使用的原因sync.Once
是如果您想控制是否以及何時執行某些代碼。程序包init()
函數將在應用程序啟動期間調用。sync.Once
允許您執行諸如延遲初始化之類的事情,例如在第一次請求時創建資源(但只有一次,以防多個“第一個”請求同時進入)而不是在應用程序啟動時;或者僅在實際需要時才初始化資源。
- 1 回答
- 0 關注
- 185 瀏覽
添加回答
舉報
0/150
提交
取消