Golang 包单例模式小记

学习golang也有一段时间了,但是对包的概念不是很清楚,这里模拟一个单例的实现

  • 加深了对包的理解,包中变量作用域的使用
  • 对包全局变量作用域有了理解
目录结构

916258-20160514012016265-542738725.png

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)
}

结果输出

916258-20160514012302780-926148150.png

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

转载于:https://www.cnblogs.com/soulsu/p/5491747.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值