Go语言技术文章
-
解释 runtime.NumCPU 与 runtime.GOMAXPROCS(0) 的差异来源,结合显式配置、CPU 亲和性、Linux cgroup CPU 限额和 Go 1.25 容器感知默认值,帮助排查时判断何时正常、何时需要调整。184 收藏 -
用 slog.HandlerOptions.Level 过滤 DEBUG 日志,并用 slog.LevelVar 在运行时切换最低级别,掌握默认 Logger、Enabled 和多 Handler 的边界。183 收藏 -
DB.Stats 的 MaxIdleClosed 是因 SetMaxIdleConns 关闭连接的累计次数,不等于连接泄漏。本文拆开空闲数量回收、空闲时间回收和生命周期回收的区别,并给出用 DBStats 快照排查连接池的 Go 写法。182 收藏 -
本文说明怎样使用 regexp/syntax.Parse 把 Go 正则模式解析成语法树,并递归读取 Op、Sub、Rune、Min、Max 与 Name,最后区分解析错误和后续匹配结果。182 收藏 -
Go 的 os.CreateTemp 和 os.MkdirTemp 只负责创建资源,不会替调用方自动删除。本文从正常路径、错误路径和长时间运行服务三个场景说明如何用 defer 绑定清理责任,避免临时目录持续增长。180 收藏 -
Go linkname 会绕过未导出声明的封装。本文从需求、符号签名、内存布局、Go 版本、链接器、目标架构和回滚路径几个方面说明使用前必须明确的边界。177 收藏 -
Go 测试辅助函数不必手动拼接父子测试名称,传入 *testing.T 后调用 t.Name() 即可获取当前测试或子测试的完整名称。本文说明表驱动测试、t.Helper 配合方式,以及名称作为诊断信息时的边界。177 收藏 -
通过给表驱动用例增加语义化 Name 字段,让 Go testing.T.Run 的输出、-run 筛选和失败定位保持稳定。176 收藏 -
Golang · Go教程 | 1天前 | 标准库 · Go教程 · net/http · Go net/http http/2 ResponseController Hijack ErrNotSupported HTTP/1.x
Go ResponseController.Hijack 需要按调用结果判断当前 ResponseWriter 是否支持连接接管。本文区分 HTTP/1.x、HTTP/2 与包装器能力,说明 ErrNotSupported 的降级处理,以及接管后 net.Conn、缓冲读写器和 Request.Body 的责任边界。176 收藏 -
runtime.KeepAlive 只保证对象在指定位置前仍然可达,不负责关闭文件描述符、连接或其他外部资源。本文从终结器提前运行的风险出发,说明 KeepAlive 的正确位置、显式 Close 的责任和资源持续占用的排查方法。176 收藏 -
Go encoding/binary.Decode 适合把固定布局的字节切片按 LittleEndian 或 BigEndian 解析到结构体。本文说明字段限制、返回字节数、缓冲区不足,以及 Decode、Read、Encode 的选择。175 收藏 -
plugin.Open 返回不兼容错误时,先检查应用和插件是否使用相同的 Go 工具链、构建标签、环境变量与共享依赖源码,再决定是否重新统一构建或改用 IPC。175 收藏 -
testing.T.Setenv 不会返回 error,设置失败会直接让测试失败;并行测试还会触发额外限制。本文区分 t.Setenv、os.Setenv、Fatal 输出和并发冲突,给出稳定的 Go 测试写法。175 收藏 -
Go 的 panic 和 recover 只作用于当前 goroutine 的调用栈。本文解释外层 recover 为什么接不到子 goroutine 的 panic,并给出在 goroutine 内部恢复、传递错误和选择 error 的实用写法。174 收藏 -
Go testing.T.Setenv 测试单独通过、整包失败时,如何区分并行限制、配置缓存与后台任务污染,并用串行环境适配和显式输入稳定测试。174 收藏