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进行操作
posted @ 2016-05-14 01:17  soulsu  阅读(958)  评论(0)    收藏  举报