Go语言实现单例模式
单例模式
单例模式分为饿汉和懒汉模式,前者是在程序启动的时候就初始化一个单例对象,后者是使用到这个单例的时候,才会初始化一个单例对象。
饿汉模式
package main
import "fmt"
type Singleton struct {
}
var instance *Singleton = &Singleton{}
func GetInstance() *Singleton {
return instance
}
func main() {
s1 := GetInstance()
s2 := GetInstance()
fmt.Printf("%p\n", s1)
fmt.Printf("%p\n", s2)
}
懒汉模式
package main
import (
"fmt"
"sync"
)
type Singleton struct {
}
var instance *Singleton
var once sync.Once
func GetInstance() *Singleton {
once.Do(func() {
instance = &Singleton{}
})
return instance
}
func main() {
s1 := GetInstance()
s2 := GetInstance()
fmt.Printf("%p\n", s1)
fmt.Printf("%p\n", s2)
}
打印出来的地址值是一样的,说明s1和s2是同一个对象。