Go问答技术文章
-
Go time.Ticker.Reset 只改变后续周期,不等于清空 ticker.C。本文解释旧 tick 为什么不能用普通接收直接“排空”,并给出单 goroutine、非阻塞判断和重建 ticker 的选择边界。339 收藏 -
time.Duration 本质是纳秒整数,String 会按可读性自动选择小时、分钟、秒、毫秒、微秒或纳秒,并保留负值符号。本文用典型场景解释这些输出为什么不同,以及接口需要固定格式时怎么处理。339 收藏 -
Go 自定义证书链验证失败时,先把 Roots、Intermediates 和 KeyUsages 分开检查:根证书决定信任锚,中间证书负责补链,KeyUsages 决定用途约束。339 收藏 -
Go 1.27 的 vet 会提示一种容易被忽略的错误包装问题:把实现 error 的值类型错误用指针形态传给 %w,随后 errors.As 按指针类型匹配就会失败。本文用最小代码区分值类型、指针类型和 As 目标,给出修复写法与排查清单。339 收藏 -
Go x/text/encoding/unicode 解码 UTF-16 时,代理项只是代码单元,必须由高代理项和低代理项配对才能还原补充平面字符。本文说明孤立代理项为何变成 U+FFFD,以及字节序、BOM 和流式 ErrShortSrc 的排查方法。339 收藏 -
用 Go os.Root 和 Root.Open 把外部文件名限制在可信目录树内,说明 OpenFile、Root.FS、资源关闭与挂载边界。339 收藏 -
Go netip.Prefix 解析 CIDR 后为什么还保留主机位?关键在于 ParsePrefix 和 PrefixFrom 都不会替调用者自动掩码。本文说明 Prefix、Masked、Contains 的职责边界,并给出在展示、存储和地址匹配边界处统一规范化的写法。338 收藏 -
Go pprof heap 报告定位不了内存泄漏,通常不是命令少,而是采集窗口、inuse 与 alloc 指标、采样率没有分开处理。本文给出一套可重复的采集和阅读顺序。338 收藏 -
Go WebSocket 断开后没有马上出现错误,常见原因是程序没有持续读取连接。本文用 Gorilla WebSocket 说明 CloseError、读循环、关闭处理器和读超时的边界。338 收藏 -
Go io.CopyN 短输入通常返回 EOF,而非 ErrUnexpectedEOF。结合已写字节数和原始错误判断失败,理解部分写入、错误包装、重试与资源提交的边界。338 收藏 -
Go http.Client.Timeout 不只限制建立连接,还覆盖重定向和响应体读取;本文从响应头已返回但 Body 仍超时的现象出发,给出整体超时与请求级超时的排查写法。338 收藏 -
ECDSA 公钥不能直接当作 ecdh.PublicKey 的原始字节使用。本文用 Go 标准库说明 PKIX 公钥解析、ecdsa.PublicKey.ECDH 转换、共享密钥验证,以及 invalid public key 的常见边界。338 收藏 -
time.Duration 本质是 int64 纳秒计数,乘法、单位换算或退避累加一旦超出约 290 年范围就可能回绕成负数或异常的小值。本文从定时任务故障场景出发,给出边界判断、饱和乘法和定时器接入的 Go 实现。337 收藏 -
Go build 默认会在条件满足时写入版本控制信息。本文围绕 -buildvcs 解释 stamping 失败的原因、仓库边界和修复选择。337 收藏 -
io.LimitedReader 的 N 是剩余读取预算,不是底层文件或网络流的真实长度。本文按 N、读取字节数和 error 分层判断达到上限、源数据提前 EOF 与其他错误,并给出固定长度读取的选择。337 收藏