在Go語言中,可以通過如下方法實現單例模式:
package singleton
import "sync"
type singleton struct{}
var instance *singleton
var once sync.Once
func GetInstance() *singleton {
once.Do(func() {
instance = &singleton{}
})
return instance
}
在這個例子中,通過sync.Once實現了只執行一次的功能,保證了實例只會被創建一次。
package singleton
import "sync"
type singleton struct{}
var instance *singleton
var mu sync.Mutex
func GetInstance() *singleton {
mu.Lock()
defer mu.Unlock()
if instance == nil {
instance = &singleton{}
}
return instance
}
在這個例子中,通過sync.Mutex實現了互斥鎖,保證了實例的創建和獲取是線程安全的。
這兩種方法都可以實現單例模式,具體選擇哪種方式取決于實際需求和偏好。