Go语言技术文章
-
Decoder.UseNumber 只把 interface 中的 JSON 数字保留为 json.Number,避免先转 float64;它不会替目标类型检查范围。转换为 int64、uint64 或 big.Int 时仍要检查错误与业务上限。297 收藏 -
用 Go 标准库统一处理 JSON 未知字段、大整数与金额精度、RFC3339 时间,并给出可复用的解码入口和边界检查。297 收藏 -
Go 插件注册器若只检查方法名,错误参数或返回值会拖到反射调用时才触发 panic。本文复盘这一故障,演示如何用绑定方法的 reflect.Type 在注册阶段精确限制签名,并补齐 nil、重复名称、变参方法与表驱动测试。296 收藏 -
maps.Equal 使用 == 比较 map 值,而 IEEE 754 NaN 与包括自身在内的任何 NaN 都不相等,因此两个相同键下都保存 NaN 的 map 也会比较失败。本文给出 EqualFunc 修复值比较的方法,并说明 NaN 键为何必须规避。295 收藏 -
Go 的 map 与 maps.Keys 都不保证遍历顺序。本文给出 slices.Sorted(maps.Keys(m)) 的最小写法,说明默认升序、自定义比较器、稳定输出键值对、空 map、并发与性能边界。294 收藏 -
用 Go embed.FS 把 SQL 迁移文件编译进二进制,按版本稳定排序,并通过 schema_migrations 与事务安全执行。293 收藏 -
Go 的 multipart: message too large 不只是文件太大。本文区分请求体总量、非文件字段内存预算和文件临时落盘,给出 ParseMultipartForm 与 MultipartReader 的处理方案。293 收藏 -
runtime/secret.Do 通过编译器与运行时协作,减少机密数据在寄存器、栈和堆上的残留,但它不把普通优化结果变成语言规范保证。本文梳理两者的职责边界、返回值设计和兼容限制。292 收藏 -
Go 的 time.LoadLocation 需要 IANA 时区数据库。精简容器常删除系统 zoneinfo,导致本机正常的程序在运行镜像中报 unknown time zone。本文说明查找来源,并比较安装、复制与内嵌 tzdata 三种修复方式。290 收藏 -
sql.Named 会创建不带符号前缀的 NamedArg,database/sql 再将名称、序号和值交给数据库驱动。命名占位符是否可用、查询中的符号写法以及值转换规则都由具体驱动决定。290 收藏 -
Go runtime/secret 的职责是及时擦除密码学调用树中的寄存器、栈和部分堆临时数据,缩短秘密材料在进程内存中的残留时间。它不提供密钥托管、访问控制、版本轮换、审计、撤销或恢复,因此应与 KMS/HSM 等密钥管理能力组合,而不是替代它们。290 收藏 -
用 Go 标准库 uuid 包校验外部标识符时,应把长度限制、Parse、规范文本策略、Nil 业务规则、稳定错误响应和安全日志放在同一入口。本文给出路径参数与 JSON 请求的生产化写法。290 收藏 -
Go 1.26 默认启用 Green Tea GC,但 nogreenteagc 是构建时退出开关。本文说明为什么启动旧二进制时临时设置环境变量无效,并给出重建、留痕、灰度和回滚清单。290 收藏 -
Go net/http 中,ReadHeaderTimeout 只限制请求头,读取请求体要用 ReadTimeout 或按请求设置 ResponseController.SetReadDeadline。本文给出慢上传、超大请求、客户端断开和 HTTP/1.1 连接关闭的处理方式。290 收藏 -
Go 把大文件全部 embed 后,资源会进入最终可执行文件,直接放大发布体积;启动影响则取决于操作系统映射、首次读取和业务解码。本文给出构建对比、内存边界和资源拆分方法。289 收藏