Files
lockx/options.go
T
2025-09-17 19:12:55 +08:00

70 lines
1.3 KiB
Go

package lockx
import (
"context"
"log"
"time"
)
type option struct {
lockTimeout time.Duration // 锁的超时时间
Expiry time.Duration // 单次刷新有效时间
MaxRetryTimes int // 尝试次数
RetryInterval time.Duration // 尝试间隔
RefreshPeriod time.Duration // 刷新间隔
logger Logger // 日志
}
func defaultOption() *option {
return &option{
lockTimeout: time.Minute * 60,
Expiry: 5 * time.Second,
RefreshPeriod: 1 * time.Second,
MaxRetryTimes: 3,
RetryInterval: 100 * time.Millisecond,
logger: &print{},
}
}
var globalOpts []Option
// 设置
func InitOption(opts ...Option) {
globalOpts = opts
}
type Option func(*option)
func WithTimeout(t time.Duration) Option {
return func(o *option) {
o.lockTimeout = t
}
}
func WithLogger(logger Logger) Option {
return func(o *option) {
o.logger = logger
}
}
func WithExpiry(expiry time.Duration) Option {
return func(o *option) {
o.Expiry = expiry
}
}
type Logger interface {
Errorf(ctx context.Context, format string, v ...any)
Infof(ctx context.Context, format string, v ...any)
}
type print struct{}
func (*print) Errorf(ctx context.Context, format string, v ...any) {
log.Printf(format, v...)
}
func (*print) Infof(ctx context.Context, format string, v ...any) {
log.Printf(format, v...)
}