Go语言技术文章
-
Go ldflags -X 没有把版本信息写进二进制时,先检查参数引号、目标变量声明和 importpath.name,再用可执行文件的版本入口做发布前确认。496 收藏 -
Go sync.OnceValue 把一次延迟计算封装成可并发调用的函数,后续调用共享同一结果。本文说明它的基本写法、错误与 panic 边界,以及为什么刷新数据必须重建闭包。496 收藏 -
Go regexp 中文匹配为空时,按输入、UTF-8 码点、ASCII 字符类、Unicode 类和字节下标逐项排查,解决中文匹配与位置错位问题。496 收藏 -
Go build tags 选错实现文件时,先确认 GOOS、GOARCH、CGO_ENABLED,再用 go list 对照 GoFiles 与 IgnoredGoFiles,最后检查文件名后缀、//go:build 表达式和 -tags 参数是否一致。496 收藏 -
Go 的 t.Run 会为同名子测试自动追加序号保证唯一,但日志仍可能难以区分业务场景。本文用稳定字段组合测试名,改善失败定位和 -run 筛选。496 收藏 -
Go 1.22 及更高版本可以用 http.Request.SetPathValue 在单元测试中注入路径变量,再通过 PathValue 让处理器按生产代码读取。本文区分处理器测试与 ServeMux 路由测试,并说明空值、覆盖和编码边界。496 收藏 -
用context.WithTimeout或WithCancel建立脚本取消条件,再通过LState.SetContext绑定。示例说明执行错误、资源清理与Go回调的协作取消边界,避免并发关闭同一Lua状态。496 收藏 -
Go 容器内存限制不是把 SetMemoryLimit 当成硬上限,而是先给 cgroup 预留运行时和外部内存,再用 GOMEMLIMIT 或 SetMemoryLimit 约束 Go runtime 的软目标。本文按预算、配置、观测和回退步骤给出可复用做法。496 收藏 -
使用 Go slices.SortStableFunc 按结构体字段排序,掌握等值元素保序、多字段比较、降序规则与原地修改边界。496 收藏 -
Go 类型别名只是原类型的另一个名字,定义类型则创建独立类型;本文用类型身份、接收者和接口断言解释两者的方法集差异。496 收藏 -
迁移 Go 构建约束时,//go:build 与 // +build 必须表达同一条件;理解空格、逗号和多行的逻辑,再用 gofmt、go vet 和跨平台构建检查结果。496 收藏 -
同一个 Go http.Client 可以通过请求级 Context 为健康检查、普通查询和慢速报表设置不同超时。本文从一个请求巡检器出发,说明 Client.Timeout、context.WithTimeout、响应体关闭和连接复用的关系。496 收藏 -
Go test 输出 cached 并不等于测试失效,而是成功的包测试结果被复用。本文说明如何用 -count=1 强制重跑、用 -run 和 -v 定位目标,以及何时使用 go clean -testcache。496 收藏 -
Go 的 http.Client.Do 返回 404 时 err 仍可能是 nil,因为非 2xx 状态属于服务器响应,不是传输错误。本文区分 err、StatusCode 和响应体读取错误,给出关闭 Body、限制错误正文并映射业务错误的写法。496 收藏 -
遇到 concurrent map writes 不要只给 map 加锁了事。本文从最小复现开始,用 -race 报告定位共享访问,再按互斥、单所有者和 sync.Map 的边界完成修复。496 收藏