Go中用指针共享配置对象,即多个组件持有同一配置地址,实现修改一处、全局生效;需启动时初始化指针,避免函数内重赋值,推荐依赖注入而非全局变量,并注意并发安全与原地更新。

用 Go 指针共享配置对象,核心是让多个组件持有同一份配置的地址,而非各自拷贝一份值。这样修改一处,所有引用它的地方立即生效,适合运行时动态更新或全局统一管理的场景。
定义一个配置结构体,初始化后取其地址传给其他函数或结构体字段。Go 中结构体默认按值传递,必须显式用 & 取地址才能共享。
cfg = &Config{...}),否则会切断原有引用type Config struct { Port int; Env string }<br>
cfg := &Config{Port: 8080, Env: "dev"}<br>
server := NewServer(cfg) // 传指针<br>
logger := NewLogger(cfg) // 同一地址可声明包级变量保存配置指针,方便跨文件访问,但要注意并发安全和初始化顺序。
var GlobalConfig *Config 声明,配合 init() 或显式 LoadConfig() 初始化sync.RWMutex 保护写操作var Config *Config),应封装为函数(func GetConfig() *Config)控制访问更推荐把配置指针作为参数注入到服务对象中,提高可测试性和解耦度。
*Config,存为结构体字段type APIServer struct { cfg *Config }<br>
func NewAPIServer(cfg *Config) *APIServer {<br>
return &APIServer{cfg: cfg}<br>}
若需热更新配置,不要直接替换整个指针(GlobalConfig = newCfg),而应原地更新字段,并加锁保证可见性。
cfg.Port = 9090 —— 安全,前提是无竞态atomic.Value 存储指针(适合完全替换配置实例)基本上就这些。指针共享配置不复杂但容易忽略生命周期和并发问题,关键是始终明确谁拥有配置内存、谁负责初始化、谁允许修改。
以上就是如何使用Go指针实现共享配置对象_Go Pointer配置共享方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号