Go语言技术文章
-
Go 服务把 regexp.Compile 放进请求路径后,p99 往往先于 CPU 告警变差。本文用一组可复现的基线对比,说明预编译、有限缓存和输入边界各自解决什么问题,并给出可验收的 benchmark 方法。271 收藏 -
net.Buffers 把多个字节切片组织成一次 WriterTo 写入,并在支持批量写的连接上走 writev 优化;理解 WriteTo 的切片消费和短写边界,才能安全拼接协议响应。271 收藏 -
Go 1.24 引入的 crypto/subtle.WithDataIndependentTiming 能在支持的平台上为一段常量时间代码启用架构级时序保护,但它不会把普通的变长代码自动变成常量时间。本文结合 ConstantTimeCompare、闭包边界、panic 清理和非 Arm64 行为,说明什么时候该用、怎么验收。271 收藏 -
Go 使用 compress/gzip 写文件时,gzip.Writer.Close 会补齐压缩流并写入 GZIP footer。本文用正确的资源关闭顺序解释 Flush、Close 和底层文件句柄的边界,避免生成无法完整解压的文件。271 收藏 -
Go 的 time.Parse 不能用一个 layout 自动吞掉可选时区。本文按日志形状分流:显式时区用 time.Parse,缺少时区用 time.ParseInLocation,并说明如何统一比较与落库。271 收藏 -
用 embed.FS 把 HTML 模板嵌入 Go 二进制,再通过 html/template.ParseFS 解析并用 ExecuteTemplate 输出页面。本文从路径、glob、模板名称和数据四个边界说明部署自包含与常见排错方法。271 收藏 -
SetConnMaxIdleTime 用来限制连接在池中连续空闲的最长时间,过期连接可能由清理器或复用前检查惰性关闭。它应与 MaxIdle、MaxOpen 和 MaxLifetime 配合,并通过 DB.Stats 观察淘汰计数。271 收藏 -
C 回调进入 Go 时,关键不是猜线程会不会变化,而是明确运行时接入、线程局部状态、C 指针生命周期、cgo.Handle 和停机顺序。271 收藏 -
用 context.WithTimeoutCause 保存超时原因,用 context.Cause 区分截止时间、主动取消和上游取消。271 收藏 -
Go 1.27 的 encoding/json/jsontext 提供面向 JSON 语法的 Decoder 和 Token。本文从最小读取示例、对象数组边界、跳过值和 Token 生命周期四个方面说明怎样按 token 处理 JSON。271 收藏 -
Go 的 os.File.Readdirnames 适合把目录名称按固定批量读取。本文说明目录游标如何推进、怎样处理部分结果与 io.EOF,以及为什么它不会递归或排序。271 收藏 -
Golang · Go问答 | 1个月前 | 命令行 · flag · 错误处理 · 工程实践 · Go问答 · Go Parse 命令行参数 参数解析 flag.FlagSet ContinueOnError
flag.FlagSet 的 Parse 失败并不等于整个对象回到初始状态。本文用 ContinueOnError 拆开 parsed、已写入的默认值、剩余参数和二次 Parse 的边界,说明什么时候应该新建 FlagSet,什么时候可以在测试或子命令场景复用。270 收藏 -
Go 1.24 引入的 crypto/subtle.WithDataIndependentTiming 能在敏感计算期间启用架构相关的独立时序能力,但它不会把变长代码自动变成常量时间。本文用最小示例说明包裹范围、嵌套调用、goroutine 继承和旧版本兼容边界。270 收藏 -
讲清 Go 1.22+ http.ServeMux 的父子树路由、方法匹配、具体性优先、通配符、405 与尾斜杠边界。270 收藏 -
QueryContext 超时并不自动等于连接损坏。本文从 QueryContext、Rows、驱动取消接口和 ErrBadConn 四层判断连接是否还能安全回到连接池。270 收藏