Singleton 中文為單例模式,其存在的目的就是確保code中使用的物件只會存在一個。
在Go語言中,實現的方式有四種,其中都有一個共同點: 只會實例化一次。
code 如下
package main
import (
"fmt"
"sync"
)
type Singleton struct {
value int
}
var instance *Singleton
var mutex sync.Mutex
func GetInstance() *Singleton {
mutex.Lock()
defer mutex.Unlock()
if instance == nil {
instance = new(Singleton)
fmt.Println("new instance")
}
return instance
}
code 如下
package main
import "fmt"
type Singleton struct {
value int
}
var instance *Singleton
func init() {
if instance == nil {
fmt.Println("New instance of Singleton")
instance = new(Singleton)
}
}
func GetInstance() *Singleton {
return instance
}
code 如下
package main
import (
"fmt"
"sync"
)
type Singleton struct {
value int
}
var mutex sync.Mutex
var instance *Singleton
func GetInstance() *Singleton {
if instance == nil {
mutex.Lock()
if instance == nil {
instance = new(Singleton)
fmt.Println("New Singleton")
}
mutex.Unlock()
}
return instance
}
code如下
package main
import (
"fmt"
"sync"
)
type Singleton struct {
value int
}
var once sync.Once
var instance *Singleton
func GetInstance() *Singleton {
once.Do(func() {
instance = new(Singleton)
fmt.Println("New instance of Singleton")
})
return instance
}
綜合上面的筆記,知道Singleton的宗旨為何。
但就code上的層面來說,可以知道: