单件模式 singleton
它是为了提供一个全局实例。比如数据库连接,如果每个用户和线程都独立申请,那么很快就会达到数据库连接的上限。不使用全局变量是因为:
最终目的是确保只有一个全局实例的办法,比如通过约定俗成的Instance()获得该类实例,Instance()保证不会重复创建。又或者无法调用类的构造函数,而只能调用类的获取实例函数,这样就实现了无法创建新实例的目的。
---
目录结构
main.go
./singleton/singleton.go
singleton.go
packagesingleton import( "fmt" ) var_self*Singleton typeSingletonstruct{ Namestring } funcInstance()*Singleton{ if_self==nil{ _self=new(Singleton) return_self } return_self } func(o*Singleton)SetName(sstring){ _self.Name=s } func(o*Singleton)GetName(){ fmt.Println("Name:",_self.Name) }
main.go
packagemain import( "./singleton" ) funcmain(){ a:=singleton.Instance() b:=singleton.Instance() a.SetName("funny") b.SetName("Test") a.GetName() return }
结果: Name: Test
原文链接:https://www.f2er.com/go/190972.html