Go语言技术文章
-
本地 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问答 | 1个月前 | 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 收藏 -
Go 包装文件描述符、cgo 资源等外部句柄时,finalizer 可能在最后一次字段使用后提前运行。本文说明 runtime.KeepAlive 的准确位置、finalizer 闭包的常见陷阱,以及显式 Close 和 AddCleanup 的取舍。464 收藏 -
用 reflect.StructOf 动态生成带 Tag 的结构体时,重点检查字段是否导出、Tag 是否按约定格式读取,以及嵌入字段不支持提升方法这三个边界。333 收藏 -
Golang · Go问答 | 1个月前 | 容器 · 性能排查 · Go问答 · 运行时 · go GOMAXPROCS 容器 CPU 配额 runtime.NumCPU cgroup cpu.max Kubernetes CPU limit
Go 容器里的 GOMAXPROCS 不一定等于宿主机 CPU 数。本文从 CPU limit、CPU request 和运行时实际值入手,给出 Go 进程内与 cgroup 两侧的观察方法,并说明 Go 1.25+ 的自动默认、手动覆盖和复查边界。360 收藏 -
Go 的接口类型可以参与比较,但接口里装入 slice、map 或 func 等不可比较动态值时,直接比较可能触发 panic。本文用 reflect.Type.Comparable 判断动态类型的类型级条件,再处理 nil、动态类型不同和 NaN 等边界,最后比较反射、泛型约束与业务键设计的适用场景。134 收藏 -
Go fuzzing 找到失败输入后,怎样从日志、testdata/fuzz 目录和 -run 路径中定位首次失败案例,并把它变成稳定回归测试。282 收藏