Golang 包单例模式小记
学习golang也有一段时间了,但是对包的概念不是很清楚,这里模拟一个单例的实现
- 加深了对包的理解,包中变量作用域的使用
- 对包全局变量作用域有了理解
目录结构

mian方法 main.go
package main
import (
"log"
"p/p1"
_ "t"
)
func main() {
log.Print("-------下面是main-------")
p1.Say()
}
包 t t.go
package t
import (
"p/p1"
)
func init() {
a := p1.NewPeople()
a.SetName("tttttttt")
a.SetAge(188)
p1.Say()
}
包p/p1 p1.go
package p1
import (
"log"
)
var (
single *People
)
type People struct {
Name string
Age int
}
func NewPeople() *People {
if single == nil {
single = new(People)
}
log.Print("new People", single, &single)
return single
}
func (p *People) SetName(name string) {
p.Name = name
}
func (p *People) SetAge(age int) {
p.Age = age
}
func Say() {
log.Print("Say", single, &single)
}
结果输出

- 在
t里面对p1进行了初始化并且输出初始化后的值 - 从结果可以看出不论是在包
t里面还是在mian包里面,p1中变量singole都是同一个地址,也就是实现了单例 - 只要初始化成功后,在任意包中导入
p1都可以直接使用变量singole进行操作

浙公网安备 33010602011771号