Go语言技术文章
-
Go 中限制最低 TLS 版本,直接给 tls.Config.MinVersion 设置 tls.VersionTLS12 或 tls.VersionTLS13。本文说明默认行为、客户端与服务端写法、版本范围边界,以及如何通过 ConnectionState 读取实际协商版本。197 收藏 -
Go plugin 并不是可随意替换的跨版本动态模块。本文拆解工具链、构建参数、公共依赖和平台边界,并给出同环境构建与 RPC 解耦的选择方法。426 收藏 -
Go 中不要直接比较 IP 字符串:先用 netip.ParseAddr 转成 Addr,再按任务选择 ==、Compare 或 Less;本文还说明 IPv4-mapped IPv6、IPv6 zone、零值、map key 与输入校验边界。157 收藏 -
fmt.Sscanf 适合解析结构稳定的字符串:用格式模板约束字段位置,用指针接收值,再同时检查扫描数量和 error。普通动词会按扫描规则处理空白,%c 则直接读取下一个字符。493 收藏 -
Go errors.Join 遍历需同时识别两种 Unwrap 接口,区分包装节点与叶原因;示例加入调用、深度额度,并说明截断记录和不可信方法边界。262 收藏 -
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 收藏