首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

go如何优雅的写单例?

在Go语言中,优雅地编写单例模式可以通过使用包级别的变量和匿名函数实现。以下是一个简单的示例:

代码语言: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时,如果instancenil,则会创建一个新的singleton实例。后续的调用将返回已创建的实例。

main函数中,我们通过调用getInstance获取两个单例实例s1s2,并调用它们的doSomething方法。最后,我们比较s1s2是否相同,以验证它们是否是相同的单例实例。

这种方法在Go语言中实现单例模式的同时,保持了代码的简洁和可读性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券