Go语言技术文章
-
sync.OnceValue 和 sync.OnceValues 只负责一次性初始化,不会把返回 error 当成自动重试信号。本文用最小示例说明错误缓存语义,并给出只缓存成功值的显式重试写法。179 收藏 -
设置 GOPRIVATE 后仍看到 proxy.golang.org 请求,通常是模块路径未匹配、GONOPROXY 覆盖或 GOPROXY 回退造成的。本文按检查、匹配、架构选择和缓存复查四步定位。281 收藏 -
Go cmp.Or 会把空字符串、数字 0 和 false 都视为零值并继续回退。本文说明它的判断边界,并用 Value 与 Valid 分离的写法保留显式零值。452 收藏 -
Go mod edit -replace 默认会改写 go.mod。本文用 go.work 和独立 modfile 两种方式隔离本地依赖替换,并给出提交与 CI 检查方法。122 收藏 -
Go maps.Keys 返回的是键迭代器,不保证每次调用顺序一致。无序诊断可以直接遍历;日志、快照、接口文本和测试若要求稳定结果,应使用 slices.Sorted 或业务比较器显式建立顺序。187 收藏 -
本地 go work use 能找到 sibling 模块,不代表 CI 也拥有同样的目录。本文从相对路径、检出范围和 GOWORK 状态排查原因,并区分工作区联调与单模块消费者构建。386 收藏 -
Go maps.Equal 比较包含 NaN 的映射时返回 false,是因为它按 == 比较值,而 NaN 不等于自身。本文解释值与键的边界,并给出 maps.EqualFunc 的业务比较写法。489 收藏 -
用 pprof.Do 把标签限制在请求和任务的明确作用域内,理解 goroutine 继承、同名覆盖和线程池复用,避免并发剖面出现串标。111 收藏 -
maps.Clone 会新建顶层 map,但只对键和值做普通赋值;当值是 slice、嵌套 map、指针或包含引用的结构体时,内部状态仍可能共享。本文用对照代码说明影响范围,并给出逐层复制的写法。214 收藏 -
Go pprof.StartCPUProfile 如果停止太晚,会把无关阶段纳入采样窗口,并让结束时的 profile 写入等待变长。本文用明确的开始、停止和关闭顺序说明如何控制 CPU 剖面范围。259 收藏 -
Go slices.Compact 只压缩连续重复值,并会清理新长度之后的尾部。本文结合源码说明 clear 的内存语义、原地复用边界和安全使用方式。254 收藏 -
Golang · Go问答 | 2星期前 | pprof · Go问答 · go tool pprof Go pprof.Lookup Go运行时剖面导出 pprof.WriteTo Go heap剖面
Go pprof.Lookup 可以按名称取得运行时剖面,再通过 WriteTo 导出为 pprof 文件。本文给出 nil 判断、debug 参数、文件关闭和 go tool pprof 核对的完整写法。141 收藏 -
Go 的 slices.SortStableFunc 会保留比较器判定为相等的元素在原切片中的相对顺序。本文用带 score 和 id 的记录演示比较器写法、稳定性测试、tie-breaker 的影响,以及原地排序和复制排序的选择。409 收藏 -
Go runtime.SetFinalizer 遇到引用环时,垃圾回收无法安排满足依赖关系的终结顺序,终结器执行并不保证。本文用最小对象图说明原因,并给出断开回指、显式 Close 和可靠测试的处理方式。189 收藏 -
Go slices.Delete 会原地移动元素并清零被移出范围的尾部槽位,但切片容量仍可能保留底层数组。本文用指针元素说明删除后的引用清理、垃圾回收边界和批量删除策略。316 收藏