Go语言技术文章
-
Go 里 errors.Is 返回 false,很多时候不是目标错误不对,而是错误链在中间被格式化字符串截断了。本文从一个可复现的订单查询示例出发,比较 %v、%w 和自定义错误的行为,再给出 errors.Is、errors.As 的检查边界与测试写法。148 收藏 -
Go 1.23 为 for range 增加了函数迭代器。本文从旧版自定义遍历写法迁移到 iter.Seq,说明 yield 返回值、提前停止、iter.Pull 和 go.mod 版本边界,并给出可运行的检查代码。148 收藏 -
Go语言中指针本身不能实现深拷贝,仅复制地址;深拷贝需递归、反射(如reflect.Value.Clone())或序列化,且须处理指针、切片、map、struct四类复合类型及字段导出性。147 收藏 -
本文介绍在Go中使用exec.Command同时捕获并合并子进程的标准输出(stdout)与标准错误(stderr)流的正确方法,避免分别处理导致的顺序错乱或遗漏,并提供可直接运行的完整示例。本文介绍在Go中使用`exec.Command`同时捕获并合并子进程的标准输出(stdout)与标准错误(stderr)流的正确方法,避免分别处理导致的顺序错乱或遗漏,并提供可直接运行的完整示例。在Go中调用外部命令(如dockerbuild)147 收藏 -
ReceiverQueueSize设为0会被自动修正为1000,因客户端消费依赖非空缓冲区触发消息分发,强行设0将导致Receive()阻塞在waiting状态;其本质是控制Broker推送批量大小,而非拉取粒度。147 收藏 -
Golang · Go教程 | 2个月前 | 并发编程 · 数据竞争 · Go教程 · 生产实践 · race detector · golang Go 数据竞争 并发 sync atomic race detector go test -race
从共享计数器和订单状态缓存出发,讲清 Go race detector 的运行方式、报告解读、修复策略、CI 阻断和上线检查。147 收藏 -
Golang · Go问答 | 1个月前 | goroutine · Context · 超时控制 · Go问答 · 协程泄漏 · Go Goroutine 超时控制 context.WithTimeout 取消信号 协程泄漏 ctx.Done
context.WithTimeout 只会在到期后关闭 Done 通道并返回取消原因,不会直接停掉 goroutine。Go 代码要把 ctx 传进阻塞调用,并在 select、循环和清理逻辑里主动响应取消信号。147 收藏 -
Golang · Go问答 | 1星期前 | 工具链 · go语言 · Go教程 · 版本升级 · 代码重构 · Go 1.26 go fix modernizer 代码升级 new 表达式 Go 代码迁移
Go 1.26 重写了 go fix,把它从旧式修复命令变成基于 go/analysis 的 modernizer 工具。本文用一个含有可选字段和自定义 newInt 函数的 Go 模块,演示如何预览建议、限定改动范围、检查 go.mod 版本并完成回归。147 收藏 -
Golang · Go问答 | 1个月前 | golang · 消息队列 · 性能优化 · websocket · 高并发 · Go WebSocket广播 Go慢客户端 WebSocket发送队列 Go Hub分片 WebSocket背压
Go WebSocket 广播卡顿,常常不是 CPU 不够,而是一条慢连接把广播路径堵住了。本文从一个房间广播现场出发,说明为什么要给每个客户端独立发送队列、如何确定队列满时的业务策略,以及何时需要按房间分片 Hub,并给出可观测的检查项。146 收藏 -
自定义错误结构体通过实现Error方法携带错误码、时间戳等信息,结合工厂函数和errors.As进行类型判断,可扩展StatusCode、IsRetryable等方法,提升Go错误处理的可编程性与灵活性。145 收藏 -
Go1.18起原生支持覆盖率引导的模糊测试,需写合规fuzz函数(单参数*testing.F)、提供有效种子语料、在Fuzz闭包中做断言并合理约束运行时长与资源。145 收藏 -
GitHubActions中gotest卡住主因是未设超时及遗留goroutine,须加-timeout60s、用httptest.NewUnstartedServer、跳过真实DB连接;发布失败因路径权限错,需清理dist并设GITHUB_TOKEN写权限;私有模块拉取失败因漏配GOPRIVATE和go.sum缓存key。145 收藏 -
模块发布前必须设置正确的go.mod文件,其modulepath需与代码托管地址一致(如github.com/yourname/yourmodule),打tag必须为vX.Y.Z格式,且需在全新环境验证goget和gobuild是否正常。145 收藏 -
异步写入避免阻塞:通过内存缓冲和独立goroutine解耦日志写入;2.合理轮转策略:按大小轮转、限制备份数、延迟压缩;3.优化库配置:调整lumberjack的MaxSize、MaxBackups,复用文件句柄;4.减少日志开销:去除冗余、结构化输出、高频日志采样。需持续调优以避免性能瓶颈。145 收藏 -
Go 的 html/template 在链接、CSS 等上下文中会自动过滤不安全数据。页面出现 #ZgotmplZ 往往不是模板坏了,而是 URL 被判定为不可信。本文说明最小复现、协议白名单和不该绕过的安全边界。145 收藏