Go语言技术文章
-
Go 的 errors.As 会沿着错误包装链查找匹配类型。本文用自定义错误说明 %w、目标变量和指针层级的正确写法,并给出迁移与回归检查清单。487 收藏 -
Go 1.22 起,http.ServeMux 支持在同一模式中注册 HTTP 方法、路径和通配符。本文用用户接口示例说明 PathValue、最具体匹配、冲突 panic、405 以及旧项目兼容边界。487 收藏 -
Go 的 time.Time 默认通过 MarshalJSON 输出 RFC3339 字符串,时区表现为 Z 或数值偏移,纳秒来自原始时间值。本文说明如何理解默认结果,并用 Format 明确控制 API 的时区与精度。487 收藏 -
Go 1.23 引入的 slices.Values 可以把切片暴露为 iter.Seq。本文用同一段可运行示例验证 range 消费、空切片和提前 break 的行为,并说明它与直接遍历切片的边界。487 收藏 -
Go 1.21 引入的 clear 可以一次删除 map 的全部元素,但它不负责并发保护,也不等于立刻把底层内存还给操作系统。本文用可运行基准拆开清空速度、复用场景和重建 map 的边界。487 收藏 -
用 log/slog 的 HandlerOptions.AddSource 控制 source 字段,理解调用位置信息从哪里来、何时值得开启,以及如何在生产日志中验证它的代价。487 收藏 -
FindAllStringSubmatchIndex 返回的是原字符串的字节区间,不是字符下标。本文用一个日志标注小工具拆开整段匹配、捕获组、未匹配分组和 UTF-8 边界,给出可运行的映射方法。487 收藏 -
Go API 接收 JSON 时,如何用 Decoder.DisallowUnknownFields 拦截拼写错误和多余字段?本文从请求解码链路出发,给出可运行示例、错误响应策略与生产验收清单。487 收藏 -
以大批量订单导出为例,介绍 Go 如何通过分段文件、固定内存排序、k 路归并和断点清单,把一次性组装结果改造成可恢复的流式导出流程。487 收藏 -
govet和staticcheck是互补工具:前者是官方轻量级检查器,捕获语言层面常见错误;后者是社区增强型分析器,覆盖逻辑缺陷和风格问题。487 收藏 -
Go二进制在Alpine中报“nosuchfileordirectory”是因cgo启用后依赖glibc,而Alpine使用musllibc;应禁用cgo或换用兼容基础镜像。487 收藏 -
runtime.hmap本身不参与字段对齐填充,但其字段按声明顺序布局且依赖分配时的8字节对齐保证各字段自然对齐;真正产生显著填充的是bucket结构体,因其key/value类型对齐要求导致内存填充,影响单bucket大小和总内存占用。487 收藏 -
Go不提供开箱即用负载均衡,因http.DefaultClient和grpc.Dial传入多地址仍只连首个;需自定义RoundTripper用原子索引轮询、克隆请求并设完整URL,健康检查须独立goroutine定时执行。487 收藏 -
唯一安全的关闭方式是最后一个退出的生产者关闭channel,所有生产者须明确协作退出;sync.Once或defer-recover无法解决多生产者竞态及后续发送panic问题。487 收藏 -
递归DFS必须传visitedmap[string]bool以防止环导致无限递归;栈需用切片正确pop避免panic;返回bool实现早停;树DFS需判nil,图DFS环检测不可省。487 收藏