Go问答技术文章
-
Go 1.20 起普通接口可满足 comparable,但受 any 约束的类型参数、附加方法与不可比较动态值仍有不同边界。结合集合示例区分编译错误、运行时风险与业务键设计。123 收藏 -
Go runtime/metrics.Read 可以复用同一个 []metrics.Sample,但要区分串行采样、并发底层内存和直方图深拷贝边界。本文给出可落地的定时采样写法。472 收藏 -
Go unsafe.Pointer 本身不是 GC 失效的同义词,真正危险的是把地址转成 uintptr 后脱离指针语义长期保存,或在外部调用边界提前失去对象引用。本文按转换、生命周期、cgo 与排查边界说明安全写法。149 收藏 -
Go 的 http.Request.Cookie 查找不到目标 Cookie 时返回 http.ErrNoCookie;Cookie 存在但 Value 为空时仍会返回 Cookie 指针。本文按错误、指针和值三层说明判断顺序,并补充同名 Cookie 的处理边界。251 收藏 -
Go defer 会立即求值并保存函数值、接收者和参数,延迟执行函数体。通过日志、耗时、切片和文件关闭示例,说明如何选择入口快照、最终状态与资源绑定。322 收藏 -
Go tls.Conn.HandshakeContext 被取消后,不应只看 context 错误就继续复用连接。本文结合 HandshakeComplete 拆清握手取消、底层连接关闭和安全回收边界。448 收藏 -
解释 Go errors.As 为什么常见写法是传入目标变量的地址,区分 *MyError、**MyError、接口目标、panic 与 false,并给出错误包装和自定义 As 的排查方法。469 收藏 -
Go http.Cookie.Valid 并不检查 SameSite 枚举。本文拆分标准库字段校验、SameSite 序列化与业务白名单,帮助定位 Cookie 看似被拒绝或属性消失的问题。396 收藏 -
使用 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 收藏