Commit 41077a2b235587b39007656350372ab65bfd697a
1 parent
6d794428
Exists in
master
and in
1 other branch
feat✨:公共库
Showing
13 changed files
with
375 additions
and
161 deletions
Show diff stats
.gitignore
service/cardholder/config-registry.go
| @@ -9,15 +9,15 @@ import ( | @@ -9,15 +9,15 @@ import ( | ||
| 9 | ) | 9 | ) |
| 10 | 10 | ||
| 11 | var ( | 11 | var ( |
| 12 | - Configs map[string]*CardActivityConfig // 配置列表 k=GameId v=配置 | 12 | + _Configs map[string]*CardActivityConfig // 配置列表 k=GameId v=配置 |
| 13 | ) | 13 | ) |
| 14 | 14 | ||
| 15 | func NewConfigs() { | 15 | func NewConfigs() { |
| 16 | - Configs = make(map[string]*CardActivityConfig) | 16 | + _Configs = make(map[string]*CardActivityConfig) |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | func GetConfig(gameId string) (config *CardActivityConfig, has bool) { | 19 | func GetConfig(gameId string) (config *CardActivityConfig, has bool) { |
| 20 | - config, has = Configs[gameId] | 20 | + config, has = _Configs[gameId] |
| 21 | return | 21 | return |
| 22 | } | 22 | } |
| 23 | 23 | ||
| @@ -119,7 +119,7 @@ func ConfigDecode(gameId string, configRaw *CardActivityConfigRaw) { | @@ -119,7 +119,7 @@ func ConfigDecode(gameId string, configRaw *CardActivityConfigRaw) { | ||
| 119 | Config.StarShopConfig[i2.Id] = i2 | 119 | Config.StarShopConfig[i2.Id] = i2 |
| 120 | } | 120 | } |
| 121 | } | 121 | } |
| 122 | - Configs[gameId] = Config | 122 | + _Configs[gameId] = Config |
| 123 | 123 | ||
| 124 | GenerateConfigClient(Config) | 124 | GenerateConfigClient(Config) |
| 125 | } | 125 | } |
service/cardholder/handle.go
| @@ -5,7 +5,7 @@ import ( | @@ -5,7 +5,7 @@ import ( | ||
| 5 | "apigame/service/constd" | 5 | "apigame/service/constd" |
| 6 | "apigame/util/util-lx/lxalilog" | 6 | "apigame/util/util-lx/lxalilog" |
| 7 | "apigame/util/util-lx/lxtime" | 7 | "apigame/util/util-lx/lxtime" |
| 8 | - "apigame/util/uttype" | 8 | + "apigame/util/utslice" |
| 9 | "strconv" | 9 | "strconv" |
| 10 | ) | 10 | ) |
| 11 | 11 | ||
| @@ -103,7 +103,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH | @@ -103,7 +103,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH | ||
| 103 | sequenceId, cohort, | 103 | sequenceId, cohort, |
| 104 | openMode) | 104 | openMode) |
| 105 | // 打乱顺序 | 105 | // 打乱顺序 |
| 106 | - uttype.Shuffle(newCards) | 106 | + utslice.Shuffle(newCards) |
| 107 | for _, i3 := range newCards { | 107 | for _, i3 := range newCards { |
| 108 | allNewCards = append(allNewCards, i3) | 108 | allNewCards = append(allNewCards, i3) |
| 109 | } | 109 | } |
| @@ -226,7 +226,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model | @@ -226,7 +226,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model | ||
| 226 | // 存档 | 226 | // 存档 |
| 227 | SaveData(req.GameID, gameData) | 227 | SaveData(req.GameID, gameData) |
| 228 | 228 | ||
| 229 | - uttype.Shuffle(rsp.NewCards) | 229 | + utslice.Shuffle(rsp.NewCards) |
| 230 | 230 | ||
| 231 | // 返回信息 | 231 | // 返回信息 |
| 232 | rsp.CardHolderInfo = GetInfo(gameData, config) | 232 | rsp.CardHolderInfo = GetInfo(gameData, config) |
service/cardholder/logic.go
| @@ -7,7 +7,8 @@ import ( | @@ -7,7 +7,8 @@ import ( | ||
| 7 | "apigame/util/util-lx/lxalilog" | 7 | "apigame/util/util-lx/lxalilog" |
| 8 | "apigame/util/util-lx/lxtime" | 8 | "apigame/util/util-lx/lxtime" |
| 9 | "apigame/util/utjson" | 9 | "apigame/util/utjson" |
| 10 | - "apigame/util/uttype" | 10 | + "apigame/util/utslice" |
| 11 | + "apigame/util/utstring" | ||
| 11 | ) | 12 | ) |
| 12 | 13 | ||
| 13 | // SaveData 存储数据 | 14 | // SaveData 存储数据 |
| @@ -117,7 +118,7 @@ func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int { | @@ -117,7 +118,7 @@ func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int { | ||
| 117 | list = append(list, index) | 118 | list = append(list, index) |
| 118 | } | 119 | } |
| 119 | 120 | ||
| 120 | - indexMin := uttype.Min(list...) | 121 | + indexMin := utslice.Min(list) |
| 121 | return int(indexMin % rate) | 122 | return int(indexMin % rate) |
| 122 | } | 123 | } |
| 123 | 124 | ||
| @@ -194,7 +195,7 @@ func DoOpen(gameId string, | @@ -194,7 +195,7 @@ func DoOpen(gameId string, | ||
| 194 | combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort) | 195 | combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort) |
| 195 | scale := gameData.Details.CardSequenceScales[combineId] | 196 | scale := gameData.Details.CardSequenceScales[combineId] |
| 196 | cardId := GetOneFromArray(confCardSequence.CardIdLists, scale) | 197 | cardId := GetOneFromArray(confCardSequence.CardIdLists, scale) |
| 197 | - cardIdInt := uttype.StringToInt(cardId) | 198 | + cardIdInt := utstring.StringToInt(cardId) |
| 198 | // 增加刻度 | 199 | // 增加刻度 |
| 199 | gameData.Details.CardSequenceScales[combineId] = scale + 1 | 200 | gameData.Details.CardSequenceScales[combineId] = scale + 1 |
| 200 | // 增加卡牌 | 201 | // 增加卡牌 |
| @@ -228,7 +229,7 @@ func DoOpen(gameId string, | @@ -228,7 +229,7 @@ func DoOpen(gameId string, | ||
| 228 | { | 229 | { |
| 229 | recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) | 230 | recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) |
| 230 | dto.SaveRecord(gameId, dto.NewCardHolderRecordOpen(recordBase, | 231 | dto.SaveRecord(gameId, dto.NewCardHolderRecordOpen(recordBase, |
| 231 | - openMode, uttype.StringToInt(confCardholder.Id), utjson.JsonString(newCards))) | 232 | + openMode, utstring.StringToInt(confCardholder.Id), utjson.JsonString(newCards))) |
| 232 | } | 233 | } |
| 233 | 234 | ||
| 234 | return | 235 | return |
| @@ -270,7 +271,7 @@ func DoOpenCheckAward(gameId string, | @@ -270,7 +271,7 @@ func DoOpenCheckAward(gameId string, | ||
| 270 | } | 271 | } |
| 271 | // 集齐处理发奖 | 272 | // 集齐处理发奖 |
| 272 | gameData.Details.Album[albumId] += 1 | 273 | gameData.Details.Album[albumId] += 1 |
| 273 | - award := confAlbum.Rewards[uttype.IntToString(gameData.Details.Round)] | 274 | + award := confAlbum.Rewards[utstring.IntToString(gameData.Details.Round)] |
| 274 | awardAlbum[albumId] = award | 275 | awardAlbum[albumId] = award |
| 275 | { | 276 | { |
| 276 | // 记录日志 | 277 | // 记录日志 |
| @@ -282,7 +283,7 @@ func DoOpenCheckAward(gameId string, | @@ -282,7 +283,7 @@ func DoOpenCheckAward(gameId string, | ||
| 282 | // 判断 处理 发放轮次奖励 轮次完成 | 283 | // 判断 处理 发放轮次奖励 轮次完成 |
| 283 | if CheckRoundFinish(gameData, config) { | 284 | if CheckRoundFinish(gameData, config) { |
| 284 | // 返回奖励 | 285 | // 返回奖励 |
| 285 | - awardRound = config.Awards[uttype.IntToString(gameData.Details.Round)] | 286 | + awardRound = config.Awards[utstring.IntToString(gameData.Details.Round)] |
| 286 | 287 | ||
| 287 | // 记录日志 | 288 | // 记录日志 |
| 288 | recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) | 289 | recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) |
| @@ -0,0 +1,66 @@ | @@ -0,0 +1,66 @@ | ||
| 1 | +package utmap | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "math/rand" | ||
| 5 | + "venus/util/uttype" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +// Keys Keys切片 | ||
| 9 | +func Keys[T1 comparable, T2 any](dict map[T1]T2) []T1 { | ||
| 10 | + list := make([]T1, 0) | ||
| 11 | + for k, _ := range dict { | ||
| 12 | + list = append(list, k) | ||
| 13 | + } | ||
| 14 | + return list | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +// Values Values切片 | ||
| 18 | +func Values[T1 comparable, T2 any](dict map[T1]T2) []T2 { | ||
| 19 | + list := make([]T2, 0) | ||
| 20 | + for _, v := range dict { | ||
| 21 | + list = append(list, v) | ||
| 22 | + } | ||
| 23 | + return list | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +// ContainValue 值等于 | ||
| 27 | +func ContainValue[T1 comparable, T2 comparable](dict map[T1]T2, value T2) bool { | ||
| 28 | + for _, v := range dict { | ||
| 29 | + if v == value { | ||
| 30 | + return true | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | + return false | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// ContainValueEquals 值等于 | ||
| 37 | +func ContainValueEquals[T1 comparable, T2 uttype.EqualAble](dict map[T1]T2, value T2) bool { | ||
| 38 | + for _, v := range dict { | ||
| 39 | + if v.Equals(value) { | ||
| 40 | + return true | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + return false | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +// ContainValueBy 值符合 | ||
| 47 | +func ContainValueBy[T1 comparable, T2 any](dict map[T1]T2, value T2, equals func(v1 T2, v2 T2) bool) bool { | ||
| 48 | + for _, v := range dict { | ||
| 49 | + if equals(v, value) { | ||
| 50 | + return true | ||
| 51 | + } | ||
| 52 | + } | ||
| 53 | + return false | ||
| 54 | +} | ||
| 55 | + | ||
| 56 | +// RandomOne 随机一个值 | ||
| 57 | +func RandomOne[T1 comparable, T2 any](dict map[T1]T2) T2 { | ||
| 58 | + if len(dict) <= 0 { | ||
| 59 | + return *new(T2) | ||
| 60 | + } | ||
| 61 | + list := make([]T1, 0) | ||
| 62 | + for i, _ := range dict { | ||
| 63 | + list = append(list, i) | ||
| 64 | + } | ||
| 65 | + return dict[list[rand.Intn(len(list))]] | ||
| 66 | +} |
| @@ -0,0 +1,183 @@ | @@ -0,0 +1,183 @@ | ||
| 1 | +package utslice | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "apigame/util/uttype" | ||
| 5 | + "math/rand" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +// Contains 判断切片是否包含某元素 | ||
| 9 | +func Contains[T comparable](list []T, value T) bool { | ||
| 10 | + for _, v := range list { | ||
| 11 | + if v == value { | ||
| 12 | + return true | ||
| 13 | + } | ||
| 14 | + } | ||
| 15 | + return false | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +// RandomOne 随机一个元素 | ||
| 19 | +func RandomOne[T any](list []T) T { | ||
| 20 | + if len(list) <= 0 { | ||
| 21 | + return *new(T) | ||
| 22 | + } | ||
| 23 | + return list[rand.Intn(len(list))] | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +// Remove 切片删除一个元素 | ||
| 27 | +func Remove[T comparable](list []T, item T) []T { | ||
| 28 | + for i := 0; i < len(list); i++ { | ||
| 29 | + if item == list[i] { | ||
| 30 | + list = append(list[:i], list[i+1:]...) | ||
| 31 | + i = i - 1 | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | + return list | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +// RemoveList 切片删除多个元素 | ||
| 38 | +func RemoveList[T comparable](list []T, items []T) []T { | ||
| 39 | + dMap := make(map[T]bool) | ||
| 40 | + for _, s := range items { | ||
| 41 | + dMap[s] = true | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + for i := 0; i < len(list); i++ { | ||
| 45 | + if _, ok := dMap[list[i]]; ok { | ||
| 46 | + list = append(list[:i], list[i+1:]...) | ||
| 47 | + i = i - 1 | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | + return list | ||
| 51 | +} | ||
| 52 | + | ||
| 53 | +// Sum 求和 | ||
| 54 | +func Sum[T uttype.UtNumber](list []T) T { | ||
| 55 | + var result T = 0 | ||
| 56 | + for _, v := range list { | ||
| 57 | + result += v | ||
| 58 | + } | ||
| 59 | + return result | ||
| 60 | +} | ||
| 61 | + | ||
| 62 | +// Min 最小值 | ||
| 63 | +func Min[T uttype.UtNumber](list []T) T { | ||
| 64 | + var result T = 0 | ||
| 65 | + for _, v := range list { | ||
| 66 | + if v < result { | ||
| 67 | + result = v | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + return result | ||
| 71 | +} | ||
| 72 | + | ||
| 73 | +// Max 最大值 | ||
| 74 | +func Max[T uttype.UtNumber](list []T) T { | ||
| 75 | + var result T = 0 | ||
| 76 | + for _, v := range list { | ||
| 77 | + if v > result { | ||
| 78 | + result = v | ||
| 79 | + } | ||
| 80 | + } | ||
| 81 | + return result | ||
| 82 | +} | ||
| 83 | + | ||
| 84 | +// Any 其中有一个元素符合就返回true | ||
| 85 | +func Any[T uttype.UtNumber](list []T, value T) bool { | ||
| 86 | + for _, v := range list { | ||
| 87 | + if v == value { | ||
| 88 | + return true | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + return false | ||
| 92 | +} | ||
| 93 | + | ||
| 94 | +// AnyEquals 其中有一个元素符合就返回true | ||
| 95 | +func AnyEquals[T uttype.EqualAble](list []T, value T) bool { | ||
| 96 | + for _, v := range list { | ||
| 97 | + if v.Equals(value) { | ||
| 98 | + return true | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + return false | ||
| 102 | +} | ||
| 103 | + | ||
| 104 | +// AnyBy 其中有一个元素符合就返回true | ||
| 105 | +func AnyBy[T any](list []T, value T, equals func(v1 T, v2 T) bool) bool { | ||
| 106 | + for _, v := range list { | ||
| 107 | + if equals(v, value) { | ||
| 108 | + return true | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + return false | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +// All 所有元素符合就返回true | ||
| 115 | +func All[T uttype.UtNumber](list []T, value T) bool { | ||
| 116 | + for _, v := range list { | ||
| 117 | + if v != value { | ||
| 118 | + return false | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + return true | ||
| 122 | +} | ||
| 123 | + | ||
| 124 | +// AllEquals 所有元素符合就返回true | ||
| 125 | +func AllEquals[T uttype.EqualAble](list []T, value T) bool { | ||
| 126 | + for _, v := range list { | ||
| 127 | + if !v.Equals(value) { | ||
| 128 | + return false | ||
| 129 | + } | ||
| 130 | + } | ||
| 131 | + return true | ||
| 132 | +} | ||
| 133 | + | ||
| 134 | +// AllBy 所有元素符合就返回true | ||
| 135 | +func AllBy[T any](list []T, value T, equals func(v1 T, v2 T) bool) bool { | ||
| 136 | + for _, v := range list { | ||
| 137 | + if !equals(v, value) { | ||
| 138 | + return false | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | + return true | ||
| 142 | +} | ||
| 143 | + | ||
| 144 | +// Filter 过滤 | ||
| 145 | +func Filter[T comparable](list []T, value T) []T { | ||
| 146 | + result := make([]T, 0) | ||
| 147 | + for _, v := range list { | ||
| 148 | + if v == value { | ||
| 149 | + result = append(result, v) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return result | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +// FilterEquals 过滤 | ||
| 156 | +func FilterEquals[T uttype.EqualAble](list []T, value T) []T { | ||
| 157 | + result := make([]T, 0) | ||
| 158 | + for _, v := range list { | ||
| 159 | + if v.Equals(value) { | ||
| 160 | + result = append(result, v) | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + return result | ||
| 164 | +} | ||
| 165 | + | ||
| 166 | +// FilterBy 过滤 | ||
| 167 | +func FilterBy[T any](list []T, value T, equals func(v1 T, v2 T) bool) []T { | ||
| 168 | + result := make([]T, 0) | ||
| 169 | + for _, v := range list { | ||
| 170 | + if equals(v, value) { | ||
| 171 | + result = append(result, v) | ||
| 172 | + } | ||
| 173 | + } | ||
| 174 | + return result | ||
| 175 | +} | ||
| 176 | + | ||
| 177 | +// Shuffle 打乱 | ||
| 178 | +func Shuffle[T any](list []T) { | ||
| 179 | + for i := len(list) - 1; i > 0; i-- { | ||
| 180 | + j := rand.Intn(i + 1) | ||
| 181 | + list[i], list[j] = list[j], list[i] | ||
| 182 | + } | ||
| 183 | +} |
| @@ -0,0 +1,51 @@ | @@ -0,0 +1,51 @@ | ||
| 1 | +package utstring | ||
| 2 | + | ||
| 3 | +import "strings" | ||
| 4 | + | ||
| 5 | +func ListStringToListInt(list []string) []int { | ||
| 6 | + result := make([]int, 0) | ||
| 7 | + for _, v := range list { | ||
| 8 | + result = append(result, StringToInt(v)) | ||
| 9 | + } | ||
| 10 | + return result | ||
| 11 | +} | ||
| 12 | +func ListStringToListInt64(list []string) []int64 { | ||
| 13 | + result := make([]int64, 0) | ||
| 14 | + for _, v := range list { | ||
| 15 | + result = append(result, StringToInt64(v)) | ||
| 16 | + } | ||
| 17 | + return result | ||
| 18 | +} | ||
| 19 | +func StringToListString(str string, sep string) []string { | ||
| 20 | + return strings.Split(str, sep) | ||
| 21 | +} | ||
| 22 | +func StringToListInt(str string, sep string) []int { | ||
| 23 | + return ListStringToListInt(strings.Split(str, sep)) | ||
| 24 | +} | ||
| 25 | +func StringToListListString(str string, sep1, sep2 string) [][]string { | ||
| 26 | + result := make([][]string, 0) | ||
| 27 | + list1 := strings.Split(str, sep1) | ||
| 28 | + for _, v := range list1 { | ||
| 29 | + list2 := strings.Split(v, sep2) | ||
| 30 | + result = append(result, list2) | ||
| 31 | + } | ||
| 32 | + return result | ||
| 33 | +} | ||
| 34 | +func StringToListListInt(str string, sep1, sep2 string) [][]int { | ||
| 35 | + result := make([][]int, 0) | ||
| 36 | + list1 := strings.Split(str, sep1) | ||
| 37 | + for _, v := range list1 { | ||
| 38 | + list2 := strings.Split(v, sep2) | ||
| 39 | + result = append(result, ListStringToListInt(list2)) | ||
| 40 | + } | ||
| 41 | + return result | ||
| 42 | +} | ||
| 43 | +func StringToListListInt64(str string, sep1, sep2 string) [][]int64 { | ||
| 44 | + result := make([][]int64, 0) | ||
| 45 | + list1 := strings.Split(str, sep1) | ||
| 46 | + for _, v := range list1 { | ||
| 47 | + list2 := strings.Split(v, sep2) | ||
| 48 | + result = append(result, ListStringToListInt64(list2)) | ||
| 49 | + } | ||
| 50 | + return result | ||
| 51 | +} |
| @@ -0,0 +1,30 @@ | @@ -0,0 +1,30 @@ | ||
| 1 | +package utstring | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "strconv" | ||
| 5 | +) | ||
| 6 | + | ||
| 7 | +func StringToInt(str string) int { | ||
| 8 | + if value, err := strconv.Atoi(str); err == nil { | ||
| 9 | + return value | ||
| 10 | + } | ||
| 11 | + return 0 | ||
| 12 | +} | ||
| 13 | +func StringToInt32(str string) int32 { | ||
| 14 | + return int32(StringToInt(str)) | ||
| 15 | +} | ||
| 16 | +func StringToInt64(str string) int64 { | ||
| 17 | + if value, err := strconv.ParseInt(str, 10, 64); err == nil { | ||
| 18 | + return value | ||
| 19 | + } | ||
| 20 | + return 0 | ||
| 21 | +} | ||
| 22 | +func IntToString(value int) string { | ||
| 23 | + return strconv.Itoa(value) | ||
| 24 | +} | ||
| 25 | +func Int32ToString(value int32) string { | ||
| 26 | + return IntToString(int(value)) | ||
| 27 | +} | ||
| 28 | +func Int64ToString(value int64) string { | ||
| 29 | + return strconv.FormatInt(value, 10) | ||
| 30 | +} |
util/uttype/number.go
| @@ -1,21 +0,0 @@ | @@ -1,21 +0,0 @@ | ||
| 1 | -package uttype | ||
| 2 | - | ||
| 3 | -// Int 整型 | ||
| 4 | -type Int interface { | ||
| 5 | - int | int8 | int16 | int32 | int64 | float32 | float64 | ||
| 6 | -} | ||
| 7 | - | ||
| 8 | -// Uint 无符号整型 | ||
| 9 | -type Uint interface { | ||
| 10 | - uint | uint8 | uint16 | uint32 | ||
| 11 | -} | ||
| 12 | - | ||
| 13 | -// Float 浮点 | ||
| 14 | -type Float interface { | ||
| 15 | - float32 | float64 | ||
| 16 | -} | ||
| 17 | - | ||
| 18 | -// Number 数字 | ||
| 19 | -type Number interface { | ||
| 20 | - Int | Uint | Float | ||
| 21 | -} |
util/uttype/slice.go
| @@ -1,43 +0,0 @@ | @@ -1,43 +0,0 @@ | ||
| 1 | -package uttype | ||
| 2 | - | ||
| 3 | -import "math/rand" | ||
| 4 | - | ||
| 5 | -// Contains 切片内是否有 | ||
| 6 | -func Contains[T comparable](values []T, value T) bool { | ||
| 7 | - for _, v := range values { | ||
| 8 | - if v == value { | ||
| 9 | - return true | ||
| 10 | - } | ||
| 11 | - } | ||
| 12 | - return false | ||
| 13 | -} | ||
| 14 | - | ||
| 15 | -// Min 最小值 | ||
| 16 | -func Min[T Number](values ...T) T { | ||
| 17 | - result := values[0] | ||
| 18 | - for _, v := range values[1:] { | ||
| 19 | - if v < result { | ||
| 20 | - result = v | ||
| 21 | - } | ||
| 22 | - } | ||
| 23 | - return result | ||
| 24 | -} | ||
| 25 | - | ||
| 26 | -// Max 最大值 | ||
| 27 | -func Max[T Number](values ...T) T { | ||
| 28 | - result := values[0] | ||
| 29 | - for _, v := range values[1:] { | ||
| 30 | - if v > result { | ||
| 31 | - result = v | ||
| 32 | - } | ||
| 33 | - } | ||
| 34 | - return result | ||
| 35 | -} | ||
| 36 | - | ||
| 37 | -// Shuffle 打乱 | ||
| 38 | -func Shuffle[T any](list []T) { | ||
| 39 | - for i := len(list) - 1; i > 0; i-- { | ||
| 40 | - j := rand.Intn(i + 1) | ||
| 41 | - list[i], list[j] = list[j], list[i] | ||
| 42 | - } | ||
| 43 | -} |
util/uttype/string.go
| @@ -1,84 +0,0 @@ | @@ -1,84 +0,0 @@ | ||
| 1 | -package uttype | ||
| 2 | - | ||
| 3 | -import ( | ||
| 4 | - "strconv" | ||
| 5 | - "strings" | ||
| 6 | -) | ||
| 7 | - | ||
| 8 | -const ( | ||
| 9 | - StrSpe1 = "|" | ||
| 10 | - StrSpe2 = "_" | ||
| 11 | -) | ||
| 12 | - | ||
| 13 | -func StringToInt(str string) int { | ||
| 14 | - if value, err := strconv.Atoi(str); err == nil { | ||
| 15 | - return value | ||
| 16 | - } | ||
| 17 | - return 0 | ||
| 18 | -} | ||
| 19 | -func StringToInt32(str string) int32 { | ||
| 20 | - return int32(StringToInt(str)) | ||
| 21 | -} | ||
| 22 | -func StringToInt64(str string) int64 { | ||
| 23 | - if value, err := strconv.ParseInt(str, 10, 64); err == nil { | ||
| 24 | - return value | ||
| 25 | - } | ||
| 26 | - return 0 | ||
| 27 | -} | ||
| 28 | -func IntToString(value int) string { | ||
| 29 | - return strconv.Itoa(value) | ||
| 30 | -} | ||
| 31 | -func Int32ToString(value int32) string { | ||
| 32 | - return IntToString(int(value)) | ||
| 33 | -} | ||
| 34 | -func Int64ToString(value int64) string { | ||
| 35 | - return strconv.FormatInt(value, 10) | ||
| 36 | -} | ||
| 37 | - | ||
| 38 | -func ListStringToListInt(list []string) []int { | ||
| 39 | - result := make([]int, 0) | ||
| 40 | - for _, v := range list { | ||
| 41 | - result = append(result, StringToInt(v)) | ||
| 42 | - } | ||
| 43 | - return result | ||
| 44 | -} | ||
| 45 | -func ListStringToListInt64(list []string) []int64 { | ||
| 46 | - result := make([]int64, 0) | ||
| 47 | - for _, v := range list { | ||
| 48 | - result = append(result, StringToInt64(v)) | ||
| 49 | - } | ||
| 50 | - return result | ||
| 51 | -} | ||
| 52 | -func StringToListString(str string) []string { | ||
| 53 | - return strings.Split(str, StrSpe1) | ||
| 54 | -} | ||
| 55 | -func StringToListInt(str string) []int { | ||
| 56 | - return ListStringToListInt(strings.Split(str, StrSpe1)) | ||
| 57 | -} | ||
| 58 | -func StringToListListString(str string) [][]string { | ||
| 59 | - result := make([][]string, 0) | ||
| 60 | - list1 := strings.Split(str, StrSpe1) | ||
| 61 | - for _, v := range list1 { | ||
| 62 | - list2 := strings.Split(v, StrSpe2) | ||
| 63 | - result = append(result, list2) | ||
| 64 | - } | ||
| 65 | - return result | ||
| 66 | -} | ||
| 67 | -func StringToListListInt(str string) [][]int { | ||
| 68 | - result := make([][]int, 0) | ||
| 69 | - list1 := strings.Split(str, StrSpe1) | ||
| 70 | - for _, v := range list1 { | ||
| 71 | - list2 := strings.Split(v, StrSpe2) | ||
| 72 | - result = append(result, ListStringToListInt(list2)) | ||
| 73 | - } | ||
| 74 | - return result | ||
| 75 | -} | ||
| 76 | -func StringToListListInt64(str string) [][]int64 { | ||
| 77 | - result := make([][]int64, 0) | ||
| 78 | - list1 := strings.Split(str, StrSpe1) | ||
| 79 | - for _, v := range list1 { | ||
| 80 | - list2 := strings.Split(v, StrSpe2) | ||
| 81 | - result = append(result, ListStringToListInt64(list2)) | ||
| 82 | - } | ||
| 83 | - return result | ||
| 84 | -} |
| @@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
| 1 | +package uttype | ||
| 2 | + | ||
| 3 | +type UtInt interface { | ||
| 4 | + ~int | ~int8 | ~int16 | ~int32 | ~int64 | ||
| 5 | +} | ||
| 6 | + | ||
| 7 | +type UtUint interface { | ||
| 8 | + ~uint | ~uint8 | ~uint16 | ~uint32 | ||
| 9 | +} | ||
| 10 | + | ||
| 11 | +type UtFloat interface { | ||
| 12 | + ~float32 | ~float64 | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +type UtNumber interface { | ||
| 16 | + UtInt | UtUint | UtFloat | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +type UtBase interface { | ||
| 20 | + UtNumber | string | ||
| 21 | +} |