单例模式是一种常用的设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一的实例。
通过init函数来实现单例模式。
package main
import "fmt"
type singleton struct {
name string
}
func (s *singleton) say() {
fmt.Println("I am ", s.name)
}
var instance *singleton
func init() {
instance = &singleton{name: "singleton"}
}
func GetInstance() *singleton {
return instance
}
func main() {
GetInstance().say()
}
通过sync.Once的Do方法来实现单例模式。
package main
import (
"fmt"
"sync"
)
type singleton struct {
name string
}
func (s *singleton) say() {
fmt.Println("I am ", s.name)
}
var instance *singleton
var once sync.Once
func GetInstance() *singleton {
once.Do(func() {
instance = &singleton{name: "singleton"}
})
return instance
}
func main() {
GetInstance().say()
}