package main import ( "fmt" "sync" "time" ) var ( dbConfig string // 需要初始化的配置 once sync.Once // 单例执行工具 initErr error // 存储初始化错误(通过闭包传递) wg3 sync.WaitGroup ) // 初始化配置(可能失败) func initConfig() error { fmt.Println("开始初始化配置...") time.Sleep(1 * time.Second) // 模拟耗时 // 模拟初始化失败(可注释此行测试成功场景) //return errors.New("配置文件不存在") dbConfig = "db:localhost:3306" return nil } // 获取配置(触发初始化) func getConfig(workerID int) { defer wg3.Done() once.Do(func() { initErr = initConfig() // 错误通过闭包捕获 }) if initErr != nil { fmt.Printf("工作者%d: 配置初始化失败: %v\n", workerID, initErr) return } fmt.Printf("工作者%d: 获取配置=%s\n", workerID, dbConfig) } func main() { // 5个goroutine同时尝试获取配置(触发初始化) for i := 0; i < 5; i++ { wg3.Add(1) go getConfig(i) } wg3.Wait() }