package main

import "fmt"

/*
 * 单例模式之懒汉模式
 * 非线程安全
 */

// 首先构造一个结构体
type example struct {
	name string
}

// 设置一个变量作为单例变量,这是一个私有变量,包外不可访问
var instance *example

// 写一个方法用来返回单例
func GetExample() *example {

	// 存在线程安全问题,高并发时有可能创建多个对象
	if instance == nil {
		instance = new(example)
	}
	return instance
}

func main() {
	s := GetExample()
	s.name = "第一次赋值单例模式"
	fmt.Println(s.name)

	s2 := GetExample()
	fmt.Println(s2.name)
}