Golang 包单例模式小记

soulsu · · 3502 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

学习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进行操作

有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:soulsu

查看原文:Golang 包单例模式小记

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3502 次点击  
加入收藏 微博
下一篇:go语言学习2
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传