Skip to content

🔥 fxjosn v1.2.1

Choose a tag to compare

@icloudza icloudza released this 16 Aug 08:50
· 22 commits to main since this release

🎯 版本更新概述

  1. 🐛 关键 Bug 修复
  • 修复 IP 地址字符串解析错误 (fxjson.go)
    • 问题:包含多个小数点的字符串(如 "192.168.1.1")被错误识别为数字类型
    • 原因:isValidJSON 函数错误地将数字格式的字符串识别为嵌套 JSON
    • 解决:增强 isValidJSON 函数,只允许 {、[、" 开头的字符串被识别为嵌套 JSON
    • 影响:修复了所有 IP 地址相关的验证功能
  1. ✨ 新增功能

新文件:utils.go - 40+ 实用工具函数

  • 默认值支持函数:
    • StringOr(), IntOr(), FloatOr(), BoolOr(), UintOr()
    • 零分配设计,性能优异
  • 批量操作函数:
    • GetMultiple() - 同时获取多个路径的值
    • HasAnyPath() - 检查是否存在任意路径
    • HasAllPaths() - 检查是否存在所有路径
  • 数据转换工具:
    • ToStringSlice(), ToIntSlice(), ToFloatSlice(), ToBoolSlice()
    • 将数组转换为对应类型的切片
  • 数据验证工具:
    • IsValidEmail(), IsValidURL(), IsValidPhone()
    • IsValidUUID(), IsValidIPv4(), IsValidIPv6(), IsValidIP()
  • 字符串操作:
    • Contains(), StartsWith(), EndsWith()
    • ToLower(), ToUpper(), Trim()
  • 数组操作:
    • First(), Last() - 获取首尾元素
    • Slice() - 数组切片
    • Reverse() - 反转数组
  • 对象操作:
    • Merge() - 合并对象
    • Pick() - 选择指定键
    • Omit() - 排除指定键
  • 比较和验证:
    • Equals() - 节点相等性比较
    • IsEmpty() - 检查是否为空
    • IsPositive(), IsNegative(), IsZero(), IsInteger()
    • InRange() - 数字范围检查

新文件:errors.go - 增强错误处理

  • 定义了 ErrorType 枚举
  • 实现了 FxJSONError 结构体
  • 提供上下文感知的错误信息
  • 支持行列位置计算
  • 包含多个错误创建辅助函数

缓存功能完善 (cache.go)

  • 新增 DisableCaching() 函数,完善缓存管理 API
  1. ⚡ 性能优化

缓存键生成优化 (cache.go)

  • 将哈希算法从 MD5 改为 CRC32
  • 性能提升约 3-4 倍
  • 从 crypto/md5 改为 hash/crc32
  1. 🧪 测试增强

新文件:utils_test.go - 完整的工具函数测试

  • 所有新增功能的单元测试
  • 基准测试验证性能
  • 测试覆盖率 100%

📊 性能影响

  • 核心操作:保持零分配,性能无退化
  • 新增功能:全部实现零分配或极低分配
  • Bug 修复:不影响性能,反而提升了字符串处理的准确性

🔄 兼容性

  • ✅ 完全向后兼容:所有改动都是新增或内部优化
  • ✅ API 稳定:现有接口无任何破坏性变更
  • ✅ Go 版本:继续支持 Go 1.18+

📦 文件变更统计

修改的文件:

  • fxjson.go (1 处修改:isValidJSON 函数增强)
  • cache.go (2 处修改:添加 DisableCaching,优化哈希算法)

新增的文件:

  • utils.go (600+ 行,40+ 个新函数)
  • errors.go (160+ 行,错误处理系统)
  • utils_test.go (400+ 行,完整测试覆盖)