單例模式舉例html
singleton.goweb
package singleton import ( "sync" ) type Singleton struct{} var ( singleton *Singleton once sync.Once ) func GetInstance() *Singleton { once.Do(func() { singleton = &Singleton{} }) return singleton }
singleton_test.go函數
package singleton import "testing" func TestSingleton(t *testing.T) { ins1 := GetInstance() ins2 := GetInstance() if ins1 != ins2 { t.Fatal("instance is not equal") } }
終端執行go test,會執行singleton_test.go裏面寫的測試用例性能
D:\project\src\go_dev\design_pattern\singleton>go test PASS ok go_dev/design_pattern/singleton 0.346s
查看測試代碼覆蓋率測試
go test -coverprofile=c.out
go tool cover -html=c.out
輸出ui
D:\project\src\go_dev\design_pattern\singleton>go test -coverprofile=c.out PASS coverage: 100.0% of statements ok go_dev/design_pattern/singleton 0.324s
性能測試(_test.go)htm
func BenchSingleton(b *testing.B) { ins1 := GetInstance() ins2 := GetInstance() for i := 0; i < b.N; i++ { if ins1 != ins2 { b.Fatal("instance is not equal") } } }
執行blog
go test -bench .
分析性能io
D:\project\src\go_dev\design_pattern\singleton>go test -bench . -cpuprofile cpu.out D:\project\src\go_dev\design_pattern\singleton>go tool pprof cpu.out Type: cpu Time: Aug 23, 2018 at 11:33am (CST) Duration: 200ms, Total samples = 0 Entering interactive mode (type "help" for commands, "o" for options) (pprof) web