Go语言技术文章
-
Go 给错误添加上下文时,用 fmt.Errorf 的 %w 保留哨兵错误,再用 errors.Is 沿包装链或错误树匹配目标;不要依赖错误文本,也不要把 errors.Is 和 errors.As 混用。191 收藏 -
Go select 可以把结果 channel 与 ctx.Done() 放在同一个等待边界里:结果先到就返回结果,超时或上游取消先到就停止等待。本文说明实现模式、竞态边界和资源清理。251 收藏 -
Go 的 Write 成功只表示数据已经交给文件对象,File.Sync 才负责把当前文件内容提交到稳定存储。本文用临时文件替换配置的完整顺序说明 Sync、Close、Rename 和目录项持久化的边界。150 收藏 -
用 Go 的 debug/elf.File.Symbols 读取 ELF 普通符号表,处理 elf.ErrNoSymbols,并区分 Symbols 与 DynamicSymbols 的使用边界。203 收藏 -
sync.Pool 只能复用临时对象,不能替请求保存状态。通过明确 Get、使用、Put 的所有权边界,在归还前清空请求标识、错误和缓冲引用,并用指标区分池命中与状态泄漏。365 收藏 -
Go 用 slices.IndexFunc 按条件查找切片时,会返回第一个满足判断的元素索引;如果没有匹配项则返回 -1。本文说明空切片、重复匹配、结构体字段判断、Index 对比和旧工具链降级写法。453 收藏 -
用 Go log/slog.Value.Resolve 展开 LogValuer 延迟字段,说明自定义 Handler 如何遍历 Record.Attrs、处理 Group,以及递归和错误边界。190 收藏 -
Go slog 通过 With 创建请求专属日志器并显式传递,区分请求属性与事件属性,排查字段丢失、请求串号及 Context 自动取值误区。158 收藏 -
Go 拼接 API 根地址和资源路径时,不要靠字符串加斜杠。url.JoinPath 会统一路径分隔符并清理 .、..;如果某个变量本身是一个含斜杠的数据段,再先用 url.PathEscape。245 收藏 -
Go 的 net/url 适合把地址拆成 URL 结构,再用 Values、JoinPath 和 String 重建。本文给出查询参数、路径转义、相对地址和请求 URI 的处理边界。194 收藏 -
用 Go hex.NewDecoder 把十六进制字符流包装成 io.Reader,说明 io.ReadAll、分块读取、奇数长度和非法字符的处理方式。284 收藏 -
FormatFloat 返回字符串,AppendFloat 追加到字节切片。通过读数文本示例比较结果类型、相同格式参数、缓冲区复用和异步交付责任,说明容量不是上限、追加不等于零分配。191 收藏 -
Go regexp.FindAllString 返回的是每次完整正则命中的文本。本文用一个日志片段提取小工具说明 n 参数、无匹配、空匹配,以及它和捕获组、字节下标 API 的区别。416 收藏 -
使用 Go base64.NewEncoder 和 io.Copy 流式编码文件,避免一次性读取大文件,并正确处理 Close 收尾、填充和错误返回。236 收藏 -
用 strconv.AppendFloat 生成浮点文本时,format 决定外形,prec 决定小数位或有效数字,bitSize 决定按 float32 还是 float64 的语义格式化;本文给出参数组合和缓冲区追加写法。300 收藏