考虑一个简单的场景,函数 ReadConfig 需要读取环境变量
ReadConfig 可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),
使用 sync.Once 是一个比较好的方式。
type Config struct {Server stringPort int64}var (once sync.Onceconfig *Config)func ReadConfig() *Config {once.Do(func() {var err errorconfig = &Config{Server: os.Getenv("TT_SERVER_URL")}config.Port, err = strconv.ParseInt(os.Getenv("TT_PORT"), 10, 0)if err != nil {config.Port = 8080 // default port}log.Println("init config")})return config}func main() {for i := 0; i < 10; i++ {go func() {_ = ReadConfig()}()}time.Sleep(time.Second)}
