From b692da305417409cbe758044142c45ca8797a653 Mon Sep 17 00:00:00 2001 From: liuxiaobo <1224730913@qq.com> Date: Mon, 26 May 2025 16:02:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etcd/inode.go | 9 +++--- service/baseService.go | 4 +-- service/topic.go | 15 ++++++--- xrand/rand.go | 33 +++++++++++--------- xrand/weight.go | 2 +- xtime/timex.go | 70 +++++++++++++++++++++--------------------- 6 files changed, 72 insertions(+), 61 deletions(-) diff --git a/etcd/inode.go b/etcd/inode.go index 3b66059..3ffeff2 100644 --- a/etcd/inode.go +++ b/etcd/inode.go @@ -14,9 +14,10 @@ type INode interface { MapKey() string } +// 服务节点信息,TypeId及Type都是标记同类型的节点,Name是区别该节点与其它节点的字段 type ServiceNode struct { - ServiceId int32 `json:"service_id"` // 服务id 由proto定义,gate通过该字段找到serviceNode - Name string `json:"name"` // 服务名 多个同类服务依赖name区分:1,2,3等等 + TypeId int `json:"type_id"` // 服务类型id,与Type字段功能一样, 由proto定义,gate通过该字段找到这类服务的所有节点信息 + Name string `json:"name"` // 服务名 多个同类服务依赖name区分:lobby1,lobby2,lobby3等等 Type string `json:"type"` // 服务类型:lobby, game, gate等等 Address string `json:"address"` // 地址 Port int `json:"port"` // 端口 @@ -33,7 +34,7 @@ func (s ServiceNode) EtcdRootKey() string { } func (s ServiceNode) MapKey() string { - return fmt.Sprintf("%s-%s", s.Type, s.Name) + return s.Name } type TopicNode struct { @@ -50,5 +51,5 @@ func (s TopicNode) EtcdRootKey() string { } func (s TopicNode) MapKey() string { - return fmt.Sprintf("%s", s.Name) + return s.Name } diff --git a/service/baseService.go b/service/baseService.go index 23dc8d4..b3c3c92 100644 --- a/service/baseService.go +++ b/service/baseService.go @@ -172,11 +172,11 @@ func (s *BaseService) Run() { } func (s *BaseService) Log(format string, a ...any) string { - head := fmt.Sprintf("service:%v-%v ", s.type_, s.name) + head := fmt.Sprintf("service:%v ", s.name) return head + fmt.Sprintf(format, a...) } func (s *BaseService) Err(format string, a ...any) error { - head := fmt.Sprintf("service:%v-%v ", s.type_, s.name) + head := fmt.Sprintf("service:%v ", s.name) return fmt.Errorf(head + fmt.Sprintf(format, a...)) } diff --git a/service/topic.go b/service/topic.go index 589ed47..fdbbdb5 100644 --- a/service/topic.go +++ b/service/topic.go @@ -1,18 +1,23 @@ package service -import ( - "fmt" +const ( + extTopic = ".topic" + extGroup = ".group" ) // 每个服务都有自己的服务topic func Topic(s IService) string { - return fmt.Sprintf("%v-%v.topic", s.Type(), s.Name()) + return s.Name() + extTopic +} + +func TopicEx(serviceName string) string { + return serviceName + extTopic } func GroupTopic(s IService) string { - return s.Type() + ".topic" + return s.Type() + extTopic } func GroupQueue(s IService) string { - return s.Type() + ".group" + return s.Type() + extGroup } diff --git a/xrand/rand.go b/xrand/rand.go index 9c488d0..dc9d1e5 100644 --- a/xrand/rand.go +++ b/xrand/rand.go @@ -5,54 +5,59 @@ import ( "time" ) +var rd *rand.Rand + func init() { - rand.New(rand.NewSource(time.Now().UnixNano())) + rd = rand.New(rand.NewSource(time.Now().UnixNano())) } -var Int = rand.Int +func Int() int { + return rd.Int() +} -func Intn(n int) int { - return rand.Intn(n) +// [0,n) +func IntN(n int) int { + return rd.Intn(n) } func Int31() int32 { - return rand.Int31() + return rd.Int31() } func Int31n(n int32) int32 { - return rand.Int31n(n) + return rd.Int31n(n) } func Int63() int64 { - return rand.Int63() + return rd.Int63() } func Int63n(n int64) int64 { - return rand.Int63n(n) + return rd.Int63n(n) } func Uint32() uint32 { - return rand.Uint32() + return rd.Uint32() } func Uint64() uint64 { - return rand.Uint64() + return rd.Uint64() } func Float32() float32 { - return rand.Float32() + return rd.Float32() } func Float64() float64 { - return rand.Float64() + return rd.Float64() } func Perm(n int) []int { - return rand.Perm(n) + return rd.Perm(n) } func Read(p []byte) (n int, err error) { - return rand.Read(p) + return rd.Read(p) } func Shuffle[T any](slice []T) { diff --git a/xrand/weight.go b/xrand/weight.go index d4d9f00..ef9a453 100644 --- a/xrand/weight.go +++ b/xrand/weight.go @@ -29,7 +29,7 @@ func WeightRandom[W int | uint | int32 | uint32 | int64 | uint64, T any](m map[W return items[0].Data, nil } - r := Intn(int(sum)) + r := IntN(int(sum)) for _, item := range items { r -= int(item.Weight) if r < 0 { diff --git a/xtime/timex.go b/xtime/timex.go index 137aabc..b07f164 100644 --- a/xtime/timex.go +++ b/xtime/timex.go @@ -14,7 +14,7 @@ import ( // 设置时区 // reverse:给Now()设置时传false,解析系统时区输出的字符串/时间戳时传true -func setLocation(c carbon.Carbon, offsets ...int) carbon.Carbon { +func setLocation(c *carbon.Carbon, offsets ...int) *carbon.Carbon { var loc *time.Location if len(offsets) > 0 { loc = time.FixedZone("CUS", offsets[len(offsets)-1]) @@ -25,7 +25,7 @@ func setLocation(c carbon.Carbon, offsets ...int) carbon.Carbon { return c.SetLocation(loc) } -func set(c carbon.Carbon, offsets ...int) carbon.Carbon { +func set(c *carbon.Carbon, offsets ...int) *carbon.Carbon { // 设置周起始 c = c.SetWeekStartsAt(WeekStartsAt) // 设置时区 @@ -33,18 +33,18 @@ func set(c carbon.Carbon, offsets ...int) carbon.Carbon { return c } -func Now(offsets ...int) (c carbon.Carbon) { +func Now(offsets ...int) (c *carbon.Carbon) { c = carbon.Now().AddSeconds(nowOffset) c = set(c, offsets...) return } -func ConvertToCarbon[T time.Time | carbon.Carbon | int64](t T, offsets ...int) carbon.Carbon { - var c carbon.Carbon +func ConvertToCarbon[T time.Time | *carbon.Carbon | int64](t T, offsets ...int) *carbon.Carbon { + var c *carbon.Carbon switch v := any(t).(type) { case time.Time: c = set(carbon.CreateFromStdTime(v), offsets...) - case carbon.Carbon: + case *carbon.Carbon: c = set(v, offsets...) case int64: c = set(carbon.CreateFromTimestamp(v), offsets...) @@ -58,7 +58,7 @@ func IsTodayTimestamp[T int | int64](timestamp T, offsets ...int) bool { } // IsToday 判断时间是否为今天 -func IsToday[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool { +func IsToday[T time.Time | *carbon.Carbon | int64](t T, offsets ...int) bool { c := ConvertToCarbon(t, offsets...) return c.ToDateString() == Now().ToDateString() @@ -70,7 +70,7 @@ func IsToday[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool { // now := time.Now() // before := time.Now().Add(-time.Hour) // IsBeforeNow(after) // true -func IsBeforeNow[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool { +func IsBeforeNow[T time.Time | *carbon.Carbon | int64](t T, offsets ...int) bool { return !IsAfterNow(t, offsets...) } @@ -80,11 +80,11 @@ func IsBeforeNow[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool // now := time.Now() // after := time.Now().Add(time.Hour) // IsAfterNow(after) // true -func IsAfterNow[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool { +func IsAfterNow[T time.Time | *carbon.Carbon | int64](t T, offsets ...int) bool { switch v := any(t).(type) { case time.Time: return IsAfter(v, time.Now(), offsets...) - case carbon.Carbon: + case *carbon.Carbon: return IsAfter(v, Now(), offsets...) case int64: return IsAfter(v, Now().Timestamp()) @@ -98,7 +98,7 @@ func IsAfterNow[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool { // t1 := time.Now().Add(-time.Hour) // t2 := time.Now() // IsBefore(t1,t2) // true -func IsBefore[T time.Time | carbon.Carbon | int64](t1, t2 T, offsets ...int) bool { +func IsBefore[T time.Time | *carbon.Carbon | int64](t1, t2 T, offsets ...int) bool { return !IsAfter(t1, t2, offsets...) } @@ -107,103 +107,103 @@ func IsBefore[T time.Time | carbon.Carbon | int64](t1, t2 T, offsets ...int) boo // t1 := time.Now().Add(time.Hour) // t2 := time.Now() // IsAfter(t1,t2) // true -func IsAfter[T time.Time | carbon.Carbon | int64](t1, t2 T, offsets ...int) bool { +func IsAfter[T time.Time | *carbon.Carbon | int64](t1, t2 T, offsets ...int) bool { c1, c2 := ConvertToCarbon(t1, offsets...), ConvertToCarbon(t2, offsets...) return c1.Gt(c2) } // TimestampToTime 将时间戳转为 carbon.Carbon 类型 -func TimestampToTime[T int | int64](timestamp T, offsets ...int) carbon.Carbon { +func TimestampToTime[T int | int64](timestamp T, offsets ...int) *carbon.Carbon { return set(carbon.CreateFromTimestamp(int64(timestamp)), offsets...) } // IsInDuration 判断某个时间在某个时间段内 -func IsInDuration[T time.Time | carbon.Carbon | int64](t, start, end T, offsets ...int) bool { +func IsInDuration[T time.Time | *carbon.Carbon | int64](t, start, end T, offsets ...int) bool { return IsAfter(t, start, offsets...) && IsBefore(t, end, offsets...) } // FormatDuration 将起止时间,格式化为 format - format -func FormatDuration[T time.Time | carbon.Carbon | int64](start, end T, layout string, offsets ...int) string { +func FormatDuration[T time.Time | *carbon.Carbon | int64](start, end T, layout string, offsets ...int) string { startC, endC := ConvertToCarbon(start, offsets...), ConvertToCarbon(end, offsets...) return fmt.Sprintf("%s - %s", startC.StdTime().Format(layout), endC.StdTime().Format(layout)) } -func Yesterday(offsets ...int) carbon.Carbon { +func Yesterday(offsets ...int) *carbon.Carbon { return Now(offsets...).SubDay().StartOfDay() } -func Today(offsets ...int) carbon.Carbon { +func Today(offsets ...int) *carbon.Carbon { return Now(offsets...).StartOfDay() } -func Tomorrow(offsets ...int) carbon.Carbon { +func Tomorrow(offsets ...int) *carbon.Carbon { return Now(offsets...).AddDay().StartOfDay() } -func NextNDay(n int, offsets ...int) carbon.Carbon { +func NextNDay(n int, offsets ...int) *carbon.Carbon { return Now(offsets...).AddDays(n).StartOfDay() } -func LastWeek(offsets ...int) carbon.Carbon { +func LastWeek(offsets ...int) *carbon.Carbon { return Now(offsets...).SubWeek().StartOfWeek() } -func ThisWeek(offsets ...int) carbon.Carbon { +func ThisWeek(offsets ...int) *carbon.Carbon { return Now(offsets...).StartOfWeek() } -func NextWeek(offsets ...int) carbon.Carbon { +func NextWeek(offsets ...int) *carbon.Carbon { return Now(offsets...).AddWeek().StartOfWeek() } -func NextNWeek(n int, offsets ...int) carbon.Carbon { +func NextNWeek(n int, offsets ...int) *carbon.Carbon { return Now(offsets...).AddWeeks(n).StartOfWeek() } -func LastMonth(offsets ...int) carbon.Carbon { +func LastMonth(offsets ...int) *carbon.Carbon { return Now(offsets...).SubMonth().StartOfMonth() } -func ThisMonth(offsets ...int) carbon.Carbon { +func ThisMonth(offsets ...int) *carbon.Carbon { return Now(offsets...).StartOfMonth() } -func NextMonth(offsets ...int) carbon.Carbon { +func NextMonth(offsets ...int) *carbon.Carbon { return Now(offsets...).AddMonth().StartOfMonth() } -func NextNMonth(n int, offsets ...int) carbon.Carbon { +func NextNMonth(n int, offsets ...int) *carbon.Carbon { return Now(offsets...).AddMonths(n).StartOfMonth() } -func LastQuarter(offsets ...int) carbon.Carbon { +func LastQuarter(offsets ...int) *carbon.Carbon { return Now(offsets...).SubQuarter().StartOfQuarter() } -func ThisQuarter(offsets ...int) carbon.Carbon { +func ThisQuarter(offsets ...int) *carbon.Carbon { return Now(offsets...).StartOfQuarter() } -func NextQuarter(offsets ...int) carbon.Carbon { +func NextQuarter(offsets ...int) *carbon.Carbon { return Now(offsets...).AddQuarter().StartOfQuarter() } -func NextNQuarter(n int, offsets ...int) carbon.Carbon { +func NextNQuarter(n int, offsets ...int) *carbon.Carbon { return Now(offsets...).AddQuarters(n).StartOfQuarter() } -func LastYear(offsets ...int) carbon.Carbon { +func LastYear(offsets ...int) *carbon.Carbon { return Now(offsets...).SubYear().StartOfYear() } -func ThisYear(offsets ...int) carbon.Carbon { +func ThisYear(offsets ...int) *carbon.Carbon { return Now(offsets...).StartOfYear() } -func NextYear(offsets ...int) carbon.Carbon { +func NextYear(offsets ...int) *carbon.Carbon { return Now(offsets...).AddYear().StartOfYear() } -func NextNYear(n int, offsets ...int) carbon.Carbon { +func NextNYear(n int, offsets ...int) *carbon.Carbon { return Now(offsets...).AddYears(n).StartOfYear() }