Go问答技术文章
-
使用 Go syscall.Flock 在 Unix 类系统中实现单实例文件锁,讲清 LOCK_EX、LOCK_NB、占用错误、文件描述符生命周期和单机边界。355 收藏 -
Go runtime/metrics 的 Float64Histogram 需要先检查 Value.Kind,再用相邻 Buckets 边界解释 Counts 分桶。本文给出安全读取、区间配对、总量汇总和累计指标判断方法。403 收藏 -
Go 的 Mutex 首次使用后不能复制。值接收者、结构体赋值和返回值都可能产生锁副本;如果副本仍指向同一底层数据,就会出现多个锁保护同一对象的并发风险。260 收藏 -
Go 32 位平台使用 64 位原子计数器时,普通 uint64 与 atomic.Uint64 的对齐责任不同。本文比较旧式原子函数、类型化原子对象和互斥锁的适用边界,给出结构体布局与兼容检查清单。195 收藏 -
Go 的 OnProxyConnectResponse 回调发生在 Transport 检查 200 OK 之前。本文用代理主机、目标主机、状态码和错误返回说明如何诊断 CONNECT,并区分代理响应、TLS 握手与最终请求失败。455 收藏 -
sync.OnceValue 不只缓存成功返回值:初始化函数一旦 panic,后续调用也会复现同一个 panic。本文结合标准库实现解释 once、valid、recover 与结果缓存的关系,并说明何时应该改用可重试方案。435 收藏 -
Go sync.Mutex 不支持同一 goroutine 的重入。本文从调用栈定位嵌套 Lock,明确解锁责任,并用带锁入口与无锁核心函数拆分临界区。102 收藏 -
解释 runtime.NumCPU 与 runtime.GOMAXPROCS(0) 的差异来源,结合显式配置、CPU 亲和性、Linux cgroup CPU 限额和 Go 1.25 容器感知默认值,帮助排查时判断何时正常、何时需要调整。184 收藏 -
Go GC 回收对象与向系统归还空闲页是不同工作,RSS 不会保证立刻下降。本文用原创采样程序区分 HeapAlloc、HeapIdle、HeapReleased 与系统内存口径,说明主动归还及软内存限制的边界。296 收藏 -
runtime.NumGoroutine 返回的是调用时刻仍存在的 goroutine 数量,不是累计创建数。本文说明读数下降的正常原因,并用连续采样与 goroutine profile 区分短时波动和持续堆积。241 收藏 -
Go pprof 暴露后,优先把业务 mux 与诊断 mux 分开,并让 pprof 监听回环或私网地址;需要远程采集时再叠加 TLS、认证、代理和 profile 级采集边界。477 收藏 -
Go 集成测试可在昂贵初始化前判断 testing.Short,并通过 t.Skip 标记跳过。本文给出最小写法与完整 HTTP 示例,说明辅助函数、子测试、TestMain、名称筛选及测试缓存的边界。273 收藏 -
Go fuzz 测试发现崩溃后,关键不是盯着随机输入猜原因,而是读取失败样本路径,使用 go test -run 精确重放,并把最小化样本保留为回归测试。本文给出可直接套用的排查顺序与边界。487 收藏 -
Go 的 -race 依赖 cgo,但启用 cgo 不等于自动覆盖 C 库内部竞态。本文区分环境报错、Go 侧动态检测和 C/C++ 侧 ThreadSanitizer 的责任边界,并给出排查命令与适用限制。234 收藏 -
用一个可落地的 Go 基准示例说明 RunParallel 的全局计时边界、goroutine 局部状态初始化、pb.Next 分工和 ns/op 结果口径。220 收藏