• 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

  • 相关阅读:
    mysql book网盘
    mysql数据库测试库下载
    TEMP
    测试
    吴炳锡
    ACMUG
    mysql select语句执行顺序
    mysql mha高可用架构的安装
    执行计划解读 简朝阳 (Sky Jian) and 那蓝蓝海
    mysql字符串比较
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/15886020.html
Copyright © 2020-2023  润新知