(1)懶漢方式
type singleton struct
var ins *singleton
func getinstance() *singleton
} return ins
}
缺點:非執行緒安全。當正在建立的時候,如果有執行緒訪問此時的ins=nil就會在建立,單例就會實現多個例項了
(2)餓漢方式
type singleton struct
var ins *singleton = &singleton{}
func getinstance() *singleton
缺點:如果singleton建立初始化比較複雜耗時時,載入時間會延長
(3)懶漢加鎖
type singleton struct
var ins *singleton
var mu sync.mutex
func getinstance() *singleton
} return ins
}
缺點:雖然解決併發的問題,但每次加鎖是需要付出代價的
(4)雙重鎖(改變加鎖位置)
type singleton struct
var ins *singleton
var mu sync.mutex
func getinstance() *singleton
} return ins
}
注:避免了每次加鎖,提高**效率
(5)sync.once實現
type singleton struct
var ins *singleton
var once sync.once
func getinstance() *singleton
}) return ins
}
sync.once官方描述once is an object that will perform exactly one action.(once是乙個物件,保證某個動作只被執行一次,最典型的就是單例模式了)
package main
import (
"fmt"
"sync"
)func main()
done := make(chan bool)
for i := 0; i < 10; i++ ()
} for i := 0; i < 10; i++
}
輸出內容
only once
program exited.
package sync
import (
"sync/atomic"
)type once struct
func (o *once) do(f func())
}func (o *once) doslow(f func())
}
參考 Golang單例模式
單例物件的類必須保證只有乙個例項存在,全域性有唯一介面訪問。懶漢方式 指全域性的單例例項在第一次被使用時構建。餓漢方式 指全域性的單例例項在類裝載時構建。type singleton struct var ins singleton func getins singleton return ins ...
golang單例模式
單例物件的類必須保證只有乙個例項存在,全域性有唯一介面訪問。type singleton struct var ins singleton func getins singleton return ins 缺點 非執行緒安全。當正在建立時,有執行緒來訪問此時ins nil就會再建立,單例類就會有多個...
golang設計模式 單例模式
單例 golang中實現單例模式非常簡單,那就是使用指標物件。根據物件的例項化時間,可以分為餓漢式和懶漢式。物件type person struct 併發測試 func main wg.wait 餓漢式 直接建立好物件,這樣不需要判斷為空,同時也是執行緒安全。唯一的缺點是在匯入包的同時會建立該物件,...