Go语言技术文章
-
Go 的 regexp.Compile 使用 leftmost-first 规则,CompilePOSIX 使用 POSIX ERE 语法和 leftmost-longest 规则。本文用同一模式对比返回结果,并说明语法、子匹配和选型边界。376 收藏 -
Go 程序在 main 函数返回后立即终止,若未显式等待后台 goroutine 完成,可能导致通道数据未被消费、文件写入中断等“静默失败”。本文详解其根本原因及可靠解决方案。 Go 程序在 main 函数返回后立即终止,若未显式等待后台 goroutine 完成,可能导致通道数据未被消费、文件写入375 收藏 -
用 testing.TB.Cleanup 管理临时目录、环境变量、HTTP 服务和数据库夹具,说明注册时机、后进先出顺序、子测试边界与失败排查方法。375 收藏 -
Go 接口字段经常变化时,按稳定字段、未知字段和动态内核选择结构体、map 或 json.RawMessage,避免类型断言扩散。375 收藏 -
用 GOOS、GOARCH 和 CGO_ENABLED=0 为 Linux ARM64 构建纯 Go 程序,并说明遇到 import C 或外部 C 库时应如何判断和处理。375 收藏 -
Go 的 build tag 不是只作用于测试文件。本文拆开构建约束、_test.go 后缀和 go test 文件选择规则,给出用 go list 与 go test 定位测试覆盖问题的方法。375 收藏 -
Go context.AfterFunc 适合绑定超时、上游取消等退出路径的补偿清理。本文用连接读截止时间示例说明 stop 返回值、清理完成同步、幂等和正常完成路径的边界。375 收藏 -
Go 程序在精简容器中调用 time.LoadLocation 报 unknown time zone,通常是镜像没有 IANA 时区数据。本文按查找顺序解释根因,并比较安装 tzdata、嵌入 time/tzdata 与显式加载数据的取舍。375 收藏 -
strings.CutPrefix 不只是删除前缀,更重要的是用 found 明确控制后续分支。本文从协议识别、多个业务前缀、空前缀和旧 Go 版本兼容几个边界,整理一套可复用的判断写法。375 收藏 -
通过一个带节点句柄的任务队列,说明 Go container/list 中 Element 的归属、插入、移动、移除和常见生命周期边界。375 收藏 -
Go 并行子测试要在各自的回调里调用 testing.T.TempDir,让每个用例获得独立且自动清理的目录;父测试提前创建目录再传递会造成共享写入。本文说明目录隔离、并行等待、清理边界和排查清单。375 收藏 -
Go 1.23 引入的 os.CopyFS 可以把 embed.FS 等 fs.FS 内容复制到磁盘,但不会覆盖已有文件。本文用一个配置目录示例讲清创建权限、覆盖错误、符号链接和可重复部署的核对方法。374 收藏 -
用一个可运行的小例子说明 Go embed.FS 读取嵌套资源时的路径规则、fs.ValidPath 校验边界与错误处理方式,避免把磁盘路径习惯带进嵌入文件系统。374 收藏 -
Go 服务收到 SIGINT 或 SIGTERM 后,不能只依赖进程直接退出。本文拆解 os/signal.NotifyContext 如何把信号转成 context.Done,说明 stop 的资源释放、取消传播和优雅退出的验收边界。374 收藏 -
用 Go io.ReadFull 读取固定长度协议,区分 io.EOF 与 io.ErrUnexpectedEOF,并根据 n 和 err 做可靠的缓冲区验收。374 收藏