学习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进行操作
有疑问加站长微信联系(非本文作者)