Golang單例模式

2021-09-10 22:27:54 字數 1243 閱讀 9225

單例物件的類必須保證只有乙個例項存在,全域性有唯一介面訪問。

懶漢方式:指全域性的單例例項在第一次被使用時構建。

餓漢方式:指全域性的單例例項在類裝載時構建。

type singleton struct

var ins *singleton

func

getins()

*singleton

}return ins

}

缺點:非執行緒安全。當正在建立時,有執行緒來訪問此時ins = nil就會再建立,單例類就會有多個例項了。

type singleton struct

var ins *singleton =

&singleton

func

getins()

*singleton

缺點:如果singleton建立初始化比較複雜耗時時,載入時間會延長。

type singleton struct

var ins *singleton

var mu sync.mutex

func

getins()

*singleton

}return ins

}

缺點:雖然解決併發的問題,但每次加鎖是要付出代價的

type singleton struct

var ins *singleton

var mu sync.mutex

func

getins()

*singleton}}

return ins

}

避免了每次加鎖,提高**效率

這次我們用了兩個判斷,而且我們將同步鎖放在了條件判斷之後,這樣做就避免了每次呼叫都加鎖,提高了**的執行效率。理論上寫到這裡已經是很完美的單例模式了,但是我們在go語言裡,我們有乙個很優雅的寫法。

type singleton struct

var ins *singleton

var once sync.once

func

getins()

*singleton })

return ins

}

once.do方法的引數是乙個函式,這裡我們給的是乙個匿名函式,在這個函式中我們做的工作很簡單,就是去賦值m變數,而且go能保證這個函式中的**僅僅執行一次!

golang單例模式

單例物件的類必須保證只有乙個例項存在,全域性有唯一介面訪問。type singleton struct var ins singleton func getins singleton return ins 缺點 非執行緒安全。當正在建立時,有執行緒來訪問此時ins nil就會再建立,單例類就會有多個...

golang設計模式 單例模式

單例 golang中實現單例模式非常簡單,那就是使用指標物件。根據物件的例項化時間,可以分為餓漢式和懶漢式。物件type person struct 併發測試 func main wg.wait 餓漢式 直接建立好物件,這樣不需要判斷為空,同時也是執行緒安全。唯一的缺點是在匯入包的同時會建立該物件,...

golang設計模式之單例模式

保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點 由於單例模式只生成乙個例項,減少系統效能開銷,當乙個物件的生產需要比較多資源時,就可以通過在應用啟動的時候直接產生乙個單例物件,然後永久駐留記憶體,例如日誌模組 單例模式可以在系統設定全域性訪問點,優化資源共享問題,比如資料庫裡連線池 餓...