Go问答技术文章
-
Go 1.25 的 trace.FlightRecorder 适合捕获长时间运行服务中的短暂性能异常。本文从缓冲窗口、触发快照、go tool trace 分析和并发边界入手,说明什么时候该用它,以及如何控制内存和文件大小。240 收藏 -
Go 代码里 errors.As 返回 false,往往不是错误没有包装,而是目标变量的类型和自定义错误的实际形态没有对上。本文用一个订单校验错误的例子,拆开值接收者、指针接收者、目标指针层级和错误链验证,帮助你快速定位匹配失败。237 收藏 -
Go 的 io/fs.WalkDir 适合做跨目录扫描,但权限错误、符号链接和大目录中断都不能靠默认行为猜测。本文用一个可运行的扫描器说明 fs.ValidPath、fs.SkipDir、context.Context 与错误记录如何配合。236 收藏 -
Golang · Go问答 | 3天前 | 并发 · 标准库 · 故障排查 · Go问答 · time.Timer · 定时器 Go time.Timer Timer.Reset Timer.Stop 并发排查
复用 Go 的 time.Timer 时,Stop 和 Reset 的行为会受到 Go 版本、定时器是否已经到期以及是否存在并发接收的影响。本文用一个超时重试场景拆开旧版本排空规则、Go 1.23 的同步定时器语义和可验证的停机边界。236 收藏 -
Go slog.HandlerOptions.AddSource 会让 TextHandler 或 JSONHandler 把日志调用点写入 source 字段,但它需要计算调用栈位置。本文用一个可运行示例说明 source 的来源、包装函数对定位的影响、性能成本与脱敏边界。235 收藏 -
Go 的 os.Root.OpenInRoot 把文件打开范围限定在指定根目录内。本文用真实代码拆开相对路径、符号链接和错误分支,说明它适合解决什么路径逃逸问题,以及如何验证回退策略。235 收藏 -
Golang · Go问答 | 1天前 | go · 密码学 · 安全编程 · 密钥管理 · crypto/ecdh · Go crypto/ecdh PrivateKey.Bytes NewPrivateKey 密钥导出
crypto/ecdh.PrivateKey.Bytes 返回私钥的原始编码,适合在明确的密钥序列化边界重新调用 Curve.NewPrivateKey;本文拆开复制语义、曲线长度校验和敏感字节生命周期,避免把原始私钥 bytes 当成通用密钥文件格式。235 收藏 -
解释 Go net/http 中 ResponseController.EnableFullDuplex 的适用边界,给出 HTTP/1 请求体与响应交错处理的最小示例、协议判断和中间件兼容检查。232 收藏 -
slog.Handler 的 WithAttrs 不只是把字段拼到日志里:实现自定义 Handler 时,属性如何分组、何时复制、如何保证并发安全,都会影响分配次数和输出一致性。本文用一个可运行的 Handler 说明这几个边界。231 收藏 -
os.DirFS 适合把目录暴露成 fs.FS,但它不是完整的安全沙箱。本文用相对路径和符号链接案例拆开根目录边界,比较 os.DirFS 与 os.OpenRoot 的使用场景,并给出检查清单。230 收藏 -
当文件名来自用户输入时,filepath.Join 只能处理字符串拼接,挡不住指向根目录外的符号链接。Go 1.24 提供的 os.OpenRoot 与 Root.Open 会在根目录范围内解析路径,本文用一个下载文件读取场景说明它能挡住什么、不能替代哪些权限控制。229 收藏 -
regexp.Regexp.LiteralPrefix 能返回正则表达式匹配必然拥有的字面前缀,但它不是完整的匹配判断。本文用请求路径筛选示例拆开 prefix、complete 与 MatchString 的边界,并给出可验证的安全用法。229 收藏 -
strings.Builder.String 返回后继续写,旧字符串通常不会被业务代码直接改写,但 Builder 可能复用底层缓冲区并触发扩容。本文用源码和小实验拆开共享存储、扩容与 Reset 的边界。228 收藏 -
围绕 Go net/http Cookie.Partitioned 说明 CHIPS 的设置方式、Secure 与 SameSite=None 的组合要求,以及浏览器兼容和降级核验边界。227 收藏 -
os.ReadFile 读配置失败时,问题通常不在读取动作本身,而在工作目录、路径拼接和错误分类。本文用一段可运行的 Go 示例拆开定位顺序,并给出能保留原始原因的错误返回方式。225 收藏