Go问答技术文章
-
Go atomic.Value 不能把 nil 接口和 *Config 混着存。用 typed nil 指针固定具体类型,再用不可变配置快照完成安全的可选配置热更新。164 收藏 -
Go sync.Cond Broadcast 唤醒所有等待者,但不保证条件仍然成立。本文用任务队列说明如何用同一把锁保护状态、用 for 循环检查条件,并排查看似丢失唤醒的问题。377 收藏 -
读多写少不等于一定该用 sync.RWMutex。本文从读临界区、写者等待、锁升级限制和实际基准四个角度,说明如何在 Mutex 与 RWMutex 之间做出可验证的选择。131 收藏 -
Go select 中加入 default 后,消费者在没有消息时会立即返回,放进无限循环就可能形成高频空轮询。本文说明空转根因,并给出阻塞接收、定时退避、批处理和退出信号的选择边界。332 收藏 -
Golang · Go问答 | 3天前 | 并发 · channel · goroutine · Go问答 · Go channel 关闭 channel 接收零值 双值接收 range channel
Go channel 关闭后,接收操作会在没有更多数据时返回元素类型的零值。要区分真实业务零值与关闭信号,应使用双值接收的 ok 标志,或用 range 消费到结束;本文同时说明缓冲区残留、关闭责任和重复 close 的常见边界。345 收藏 -
Go 的 nil channel 可以让 select 分支动态失效。本文区分 nil、开放和关闭 channel,演示双输入 fan-in 如何在识别 ok=false 后安全退出。463 收藏 -
用 Go 泛型写切片函数时,S ~[]E 可以兼容原始切片、类型别名和底层类型相同的自定义切片。本文用一个保留返回类型的示例讲清约束、推导和边界。384 收藏 -
Go comparable 约束拒绝包含切片字段的结构体,是因为结构体必须保证所有字段都可比较。本文拆解切片、数组、指针和接口字段的边界,并给出固定数组、摘要键与身份指针的改造选择。217 收藏 -
Go 泛型函数通常从调用实参建立类型关系,不能只凭接收变量的类型逆向猜出返回值中的类型参数。本文用最小示例解释推断边界,并给出显式实例化、增加输入参数和非泛型包装三种改法。128 收藏 -
设置 GOPRIVATE 后仍看到 proxy.golang.org 请求,通常是模块路径未匹配、GONOPROXY 覆盖或 GOPROXY 回退造成的。本文按检查、匹配、架构选择和缓存复查四步定位。281 收藏 -
Go mod edit -replace 默认会改写 go.mod。本文用 go.work 和独立 modfile 两种方式隔离本地依赖替换,并给出提交与 CI 检查方法。122 收藏 -
本地 go work use 能找到 sibling 模块,不代表 CI 也拥有同样的目录。本文从相对路径、检出范围和 GOWORK 状态排查原因,并区分工作区联调与单模块消费者构建。386 收藏 -
用 pprof.Do 把标签限制在请求和任务的明确作用域内,理解 goroutine 继承、同名覆盖和线程池复用,避免并发剖面出现串标。111 收藏 -
Go pprof.StartCPUProfile 如果停止太晚,会把无关阶段纳入采样窗口,并让结束时的 profile 写入等待变长。本文用明确的开始、停止和关闭顺序说明如何控制 CPU 剖面范围。259 收藏 -
Golang · Go问答 | 3天前 | pprof · Go问答 · go tool pprof Go pprof.Lookup Go运行时剖面导出 pprof.WriteTo Go heap剖面
Go pprof.Lookup 可以按名称取得运行时剖面,再通过 WriteTo 导出为 pprof 文件。本文给出 nil 判断、debug 参数、文件关闭和 go tool pprof 核对的完整写法。141 收藏