在Go语言中,优雅地编写单例模式可以通过使用包级别的变量和匿名函数实现。以下是一个简单的示例:
package main
import "fmt"
var instance *singleton
func getInstance() *singleton {
if instance == nil {
instance = &singleton{}
}
return instance
}
type singleton struct{}
func (s *singleton) doSomething() {
fmt.Println("Doing something...")
}
func main() {
s1 := getInstance()
s1.doSomething()
s2 := getInstance()
s2.doSomething()
fmt.Printf("s1 and s2 are the same instance: %v\n", s1 == s2)
}
在这个例子中,我们使用了一个包级别的变量instance
来存储单例实例。getInstance
函数用于获取单例实例。当第一次调用getInstance
时,如果instance
为nil
,则会创建一个新的singleton
实例。后续的调用将返回已创建的实例。
在main
函数中,我们通过调用getInstance
获取两个单例实例s1
和s2
,并调用它们的doSomething
方法。最后,我们比较s1
和s2
是否相同,以验证它们是否是相同的单例实例。
这种方法在Go语言中实现单例模式的同时,保持了代码的简洁和可读性。
领取专属 10元无门槛券
手把手带您无忧上云