tryDecodeID 尝试解码ID值
(value interface{})
| 197 | |
| 198 | // tryDecodeID 尝试解码ID值 |
| 199 | func tryDecodeID(value interface{}) interface{} { |
| 200 | switch v := value.(type) { |
| 201 | case string: |
| 202 | // 尝试解码字符串ID |
| 203 | if decoded, err := hashids.TryParseID(v); err == nil { |
| 204 | return decoded |
| 205 | } |
| 206 | case []interface{}: |
| 207 | // 处理ID数组 |
| 208 | var decodedIDs []int64 |
| 209 | allDecoded := true |
| 210 | |
| 211 | for _, item := range v { |
| 212 | if strItem, ok := item.(string); ok { |
| 213 | if decoded, err := hashids.TryParseID(strItem); err == nil { |
| 214 | decodedIDs = append(decodedIDs, decoded) |
| 215 | } else { |
| 216 | allDecoded = false |
| 217 | break |
| 218 | } |
| 219 | } else { |
| 220 | allDecoded = false |
| 221 | break |
| 222 | } |
| 223 | } |
| 224 | |
| 225 | if allDecoded && len(decodedIDs) > 0 { |
| 226 | // 转换为interface{}切片 |
| 227 | result := make([]interface{}, len(decodedIDs)) |
| 228 | for i, id := range decodedIDs { |
| 229 | result[i] = id |
| 230 | } |
| 231 | return result |
| 232 | } |
| 233 | } |
| 234 | |
| 235 | return nil |
| 236 | } |
| 237 | |
| 238 | // DecodeIDsInStruct 手动解码结构体中的ID字段(用于特殊情况) |
| 239 | func DecodeIDsInStruct(data interface{}) interface{} { |