golang的单件模式

单件模式 singleton

    它是为了提供一个全局实例。比如数据库连接,如果每个用户和线程都独立申请,那么很快就会达到数据库连接的上限。不使用全局变量是因为:

  • 部分语言没有全局变量;

  • 全局变量一样无法阻止类多次实例化。

    

    最终目的是确保只有一个全局实例的办法,比如通过约定俗成的Instance()获得该类实例,Instance()保证不会重复创建。又或者无法调用类的构造函数,而只能调用类的获取实例函数,这样就实现了无法创建新实例的目的。


---


目录结构

main.go

./singleton/singleton.go


singleton.go

package singleton

import (
	"fmt"
)

var _self *Singleton

type Singleton struct {
	Name string
}

func Instance() *Singleton {
	if _self == nil {
		_self = new(Singleton)
		return _self
	}
	return _self
}

func (o *Singleton) SetName(s string) {
	_self.Name = s
}

func (o *Singleton) GetName() {
	fmt.Println("Name:", _self.Name)
}


main.go

package main

import (
	"./singleton"
)

func main() {
	a := singleton.Instance()
	b := singleton.Instance()

	a.SetName("funny")
	b.SetName("Test")
	a.GetName()

	return
}


结果: Name: Test




本文来自:开源中国博客

感谢作者:FaintX

查看原文:golang的单件模式

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。