golang单例模式之sync.Once实现仅仅执行一次

2023-06-01 00:00:00 模式 执行 Golang
import (
    "fmt"
    "sync"
)

type Sing struct {
    Code string
}

var ins *Sing

//加入sync.Once 避免了每次加锁,提高代码效率
var loadOnce sync.Once

//单例
func GetIns() *Sing {
    loadOnce.Do(func() {
        ins = &Sing{}
    })
    return ins
}

ps:

Once.Do方法的参数是一个函数,这里我们给的是一个匿名函数,

在这个函数中我们做的工作很简单,就是去赋值ins变量,

而且go能保证这个函数中的代码仅仅执行一次!



测试控制器代码:

ins := GetIns()
ins.Code = "code1"

ins1 := GetIns()
ins1.Code = "code2"

fmt.Println(ins, ins1)

效果:

Once.png

相关文章