mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-13 18:00:00 +08:00
update:Use the official sync.OnceFunc (#4840)
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/logx"
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
"github.com/zeromicro/go-zero/core/proc"
|
"github.com/zeromicro/go-zero/core/proc"
|
||||||
"github.com/zeromicro/go-zero/core/syncx"
|
|
||||||
"github.com/zeromicro/go-zero/core/threading"
|
"github.com/zeromicro/go-zero/core/threading"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -35,7 +36,7 @@ type (
|
|||||||
// NewServiceGroup returns a ServiceGroup.
|
// NewServiceGroup returns a ServiceGroup.
|
||||||
func NewServiceGroup() *ServiceGroup {
|
func NewServiceGroup() *ServiceGroup {
|
||||||
sg := new(ServiceGroup)
|
sg := new(ServiceGroup)
|
||||||
sg.stopOnce = syncx.Once(sg.doStop)
|
sg.stopOnce = sync.OnceFunc(sg.doStop)
|
||||||
return sg
|
return sg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
package syncx
|
|
||||||
|
|
||||||
import "sync"
|
|
||||||
|
|
||||||
// Once returns a func that guarantees fn can only called once.
|
|
||||||
func Once(fn func()) func() {
|
|
||||||
once := new(sync.Once)
|
|
||||||
return func() {
|
|
||||||
once.Do(fn)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
package syncx
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestOnce(t *testing.T) {
|
|
||||||
var v int
|
|
||||||
add := Once(func() {
|
|
||||||
v++
|
|
||||||
})
|
|
||||||
|
|
||||||
for i := 0; i < 5; i++ {
|
|
||||||
add()
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.Equal(t, 1, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkOnce(b *testing.B) {
|
|
||||||
var v int
|
|
||||||
add := Once(func() {
|
|
||||||
v++
|
|
||||||
})
|
|
||||||
|
|
||||||
b.ResetTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
add()
|
|
||||||
}
|
|
||||||
assert.Equal(b, 1, v)
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user