Golang 包单例模式小记

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

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

目录结构

Golang 包单例模式小记_第1张图片

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

结果输出

Golang 包单例模式小记_第2张图片

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

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

你可能感兴趣的:(Golang 包单例模式小记)