Go问答技术文章
-
os.RemoveAll 对不存在路径返回 nil 是设计好的幂等语义,但权限、路径竞态或部分删除失败仍会返回错误。本文用清理函数说明如何保留原始错误并正确处理回滚。355 收藏 -
Go bitset 的 NextSet 返回索引和布尔值两个结果。本文说明 found 的真实含义、正确遍历写法、空集边界,以及 Count 与 Len 的区别。355 收藏 -
使用 Go syscall.Flock 在 Unix 类系统中实现单实例文件锁,讲清 LOCK_EX、LOCK_NB、占用错误、文件描述符生命周期和单机边界。355 收藏 -
Go slog 日志量过大时,先用 LevelVar 和 HandlerOptions.Level 过滤低价值日志,再对可聚合的成功事件做带键采样;错误、审计和关键状态变化保持全量保留。354 收藏 -
archsimd 目标实现是否被选中取决于 GOEXPERIMENT=simd、目标 GOARCH、文件名隐式约束和显式 //go:build 的共同结果,运行时 CPU 特性检查不会改变已编译文件。354 收藏 -
Go flight recorder 的缓冲区太小时不会按事件类型选择性丢弃,而会淘汰较老的完整 trace generation。本文解释 MaxBytes 与 MinAge 的优先级、会缺失的上下文及容量配置方法。354 收藏 -
Go 标准库没有统一的跨平台文件锁 API。本文比较 Unix flock 与 Windows LockFileEx 的竞争、清理语义,再给出原子占位、数据库和 Redis 等替代策略。354 收藏 -
Golang · Go问答 | 2星期前 | TLS · 连接池 · 故障排查 · Go问答 · 证书轮换 DidResume session ticket ClientSessionCache Go TLS SetSessionTicketKeys
Go TLS 证书轮换后仍看到旧会话,通常不是证书文件没替换,而是旧连接、HTTP Transport 连接池或 session ticket 在复用。本文用 DidResume 区分恢复握手,给出服务端证书指针切换、票据密钥轮换、客户端 Transport 重建和长连接排空的迁移顺序。354 收藏 -
Go bufio.Reader.Peek 的请求长度超过缓冲区时,不会自动扩容,而是返回当前可用字节和 bufio.ErrBufferFull。本文按 n、Reader.Size、Buffered 与错误值拆开说明,并给出先检查固定长度头部、再读取完整内容的处理方式。354 收藏 -
Go regexp 中点号默认不匹配换行,是因为 s 标志默认关闭。本文用最小示例说明 (?s)、局部分组 (?s:...) 与 m 标志的区别,并整理 CRLF 和匹配范围边界。354 收藏 -
Kong 的 Bind 是解析器级依赖登记,Context.Run 的参数是本次命令执行的显式注入。本文用一个可复用的 Go CLI 示例比较两种方式的时机、作用域、接口绑定和选择边界。354 收藏 -
sync.Cond.Wait 没有 context 参数,直接等待可能让取消中的 goroutine 长时间阻塞。本文用 context.AfterFunc 配合同一把 Locker 唤醒等待者,给出 WaitContext 封装、竞态边界和 channel 替代条件。354 收藏 -
recover 只能恢复当前 goroutine 正在展开的 panic。本文用调用栈边界解释父 goroutine 为什么接不住子 goroutine,并给出 worker 包装器、错误回传和资源清理的实现方式。353 收藏 -
Go map 的 range 顺序本来就不保证稳定,测试直接比较遍历结果就会偶发失败。本文用一个小型测试工具拆开集合断言与顺序断言,让 map 测试稳定且不掩盖真实数据错误。353 收藏 -
Go x/text/message 占位参数类型不匹配时,应检查实际翻译模板、参数索引和类型;通过类型封装与输入解析保持各语言模板约定一致。353 收藏