单例
保证一个类型只有一个共享实例。
创建型
说明
适合需要全局共享且初始化成本高的状态;并发环境使用 sync.Once,避免普通全局变量的初始化竞争。
分析
调用方始终通过同一个入口取得实例,因此不必自己协调对象的创建与复用。示例用 sync.Once 保证多个 goroutine 同时调用时只初始化一次。
Once.Do 协调初始化与发布:并发调用会等待初始化函数完成后取得同一个指针。它不保护返回后的 Config.Name 写入;如允许动态更新,仍需锁或不可变快照。共享范围是这个进程中的这份变量,并不是跨进程唯一配置中心,测试隔离也会受到全局状态影响。
查看图表代码
适用前提与边界
单例会引入共享状态,测试时尤其要避免让不同用例相互影响。 创建过程没有复用或选择需求时,直接构造通常更清楚。
示例输入与调用
go
fmt.Println(GetConfig().Name)运行输出
text
app完整 Go 示例
go
package main
import (
"fmt"
"sync"
)
var instance *Config
var once sync.Once
type Config struct{ Name string }
func GetConfig() *Config {
once.Do(func() { instance = &Config{Name: "app"} })
return instance
}
func main() {
fmt.Println(GetConfig().Name)
}继续阅读
- 设计意图与对象责任
- 设计意图与对象责任
- 设计意图与对象责任