单例模式

使用单例的目的是为了保证在整个系统中存在唯一的实例

package main

import (
        "fmt"
        "sync"
)

type IntAndString struct {
        num int32
        str string
}

var m *IntAndString

var once sync.Once

func GetInstance() *IntAndString {
        once.Do(func() {
        m = &IntAndString{num:1, str:"fdjkslf"}
        })
        return m
}

func (m *IntAndString) String() {
        fmt.Printf("int %v, string %v\n", m.num, m.str)
}

func main() {
        tmp := GetInstance()
        tmp.String()
        tmp.str = "hello"
        tmp1 :=  GetInstance()
        tmp1.String()
        tmp.String()
}

运行结果

int 1, string fdjkslf
int 1, string hello
int 1, string hello