mirror of
https://gitee.com/dromara/carbon.git
synced 2025-12-06 07:49:11 +08:00
- 在 SetTestNow 和 ClearTestNow 函数中,将互斥锁的解锁操作移至 defer 语句 - 这样可以确保在函数返回前始终执行解锁操作,提高代码的安全性和可读性
43 lines
758 B
Go
43 lines
758 B
Go
package carbon
|
|
|
|
import (
|
|
"sync"
|
|
"sync/atomic"
|
|
)
|
|
|
|
// FrozenNow defines a FrozenNow struct.
|
|
type FrozenNow struct {
|
|
isFrozen int32
|
|
testNow *Carbon
|
|
rw sync.RWMutex
|
|
}
|
|
|
|
var frozenNow = &FrozenNow{}
|
|
|
|
// SetTestNow sets a test Carbon instance for now.
|
|
func SetTestNow(c *Carbon) {
|
|
if c == nil {
|
|
return
|
|
}
|
|
|
|
frozenNow.rw.Lock()
|
|
defer frozenNow.rw.Unlock()
|
|
|
|
frozenNow.testNow = c
|
|
atomic.StoreInt32(&frozenNow.isFrozen, 1)
|
|
}
|
|
|
|
// ClearTestNow clears the test Carbon instance for now.
|
|
func ClearTestNow() {
|
|
frozenNow.rw.Lock()
|
|
defer frozenNow.rw.Unlock()
|
|
|
|
frozenNow.testNow = nil
|
|
atomic.StoreInt32(&frozenNow.isFrozen, 0)
|
|
}
|
|
|
|
// IsTestNow reports whether is testing time.
|
|
func IsTestNow() bool {
|
|
return atomic.LoadInt32(&frozenNow.isFrozen) == 1
|
|
}
|