【Go】一文带你掌握同步原语sync.Once底层原理及扩展玩法
package main
import (
"fmt"
"sync"
)
// 使用sync.Once实现单例模式
type singleton struct{}
var once sync.Once
var instance *singleton
func GetInstance() *singleton {
return instance
}
func init() {
instance = &singleton{}
}
func (s *singleton) Initialize() {
// 初始化代码
fmt.Println("Initialized singleton")
}
func main() {
// 安全地调用初始化方法,只会执行一次
once.Do(GetInstance().Initialize)
// 程序其他部分...
}
这段代码展示了如何使用sync.Once
来确保单例模式中的初始化代码只执行一次,即便面临多个goroutine同时调用。这是一个在Go中实现单例模式的简单方法,同时也演示了sync.Once
的用法。
评论已关闭