GO sync.Once

需求

高并发场景下,操作只执行一次,如读取配置、单例模式

 

实现

Go 的sync模块提供了只执行一次的解决方案:sync.Once, 它只有一个函数:Do

func (o *Once) Do(f func()) {}

 

示例1:读取一次配置文件

复制代码
package main

import (
    "fmt"
    "sync"
)

var once sync.Once
var mconfig map[string]string

func loadConfig(){
    mconfig = map[string]string{
        "aa": "aa_1",
        "bb": "bb_2",
    }
}

func _109_test2() {
    once.Do(loadConfig)
    fmt.Println(mconfig["aa"])
    fmt.Println(mconfig["aaa"])
    fmt.Println("Done")

}

func main() {
    _109_test2()
}
复制代码

执行:

aa_1

Done

 

示例2:单例模式

复制代码
package main

import (
    "fmt"
    "sync"
)

type singleton struct{
    name string
    age int
}

var instance *singleton
var once sync.Once

func getInstance() *singleton {
    once.Do(func() {
        instance = &singleton{"jihite", 18}
    })
    return instance
}

func _109_test1() {
    s := getInstance()
    fmt.Println(s.name, s.age)
}

func main() {
    _109_test1()
}
复制代码

执行:

jihite 18

posted @   jihite  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2016-02-12 python判断key是否在字典用in不用has_key
2016-02-12 python 之 append extend
点击右上角即可分享
微信分享提示