单例模式

2021-02-17  本文已影响0人  小幸运Q

用小写字母开头默认private

package main

import ("fmt")
type config struct {
    Name string
}

var cfg *config

func initConfig() *config {
    if cfg==nil {
        cfg = &config{"config"}
        return cfg
    }else{
        return cfg
    }
}

func main() {
    f:=initConfig()
    fmt.Println(f.Name)
}
package main

import ("fmt")
type config struct {
    Name string
}

var cfg *config =&config{"config"}

func initConfig() *config {
        return cfg
}

func main() {
    f:=initConfig()
    fmt.Println(f.Name)
}
package main

import (
    "fmt"
    "sync"
    "time"
)
type config struct {
    Name string
}

var cfg *config

var oSingle sync.Once

func initConfig() *config {
    oSingle.Do(
        func() {
            cfg = &config{"config"}

    })
    // cfg = &config{"config"} 
    //比较用
    return cfg
}
func main() {
    //fmt.Println(&cfg.Name)
    for i := 0; i <3; i++ {
        go func() {
            initConfig()
            fmt.Println(&cfg.Name)
            // fmt.Println(&cfg) 
            //访问指针的地址木有用,因为指针地址没变,变的是struct对象
        }()
    }
    time.Sleep(time.Second)
}

C++版Singleton(static变量配static函数)

class CSingleton
{
private:
    CSingleton()   //构造函数是私有的
    {
    }
    static CSingleton *m_pInstance;
public:
    static CSingleton * GetInstance()
    {
        if(m_pInstance == NULL)  //判断是否第一次调用
            m_pInstance = new CSingleton();
        return m_pInstance;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读