Go语言技术文章
-
Go 1.23 起,失去引用的 time.After 定时器可以被回收,但高频循环每轮创建 timer 和 channel 仍有分配与调度成本。本文说明 time.After 的适用边界,以及如何用可复用 Timer 配合 Stop、排空和 Reset。501 收藏 -
Go strconv.ParseFloat 可以解析 NaN、Inf 和 Infinity,但 NaN、正负无穷与普通数字溢出并不是一回事。本文用 math.IsNaN、math.IsInf 和 ErrRange 给出清晰的分类方式。501 收藏 -
Go maps.Clone 只做浅克隆:本文用顶层 map、嵌套 map、切片和指针说明哪些数据独立、哪些仍会共享,并给出按 value 类型选择复制策略的实战判断。501 收藏 -
Go 的 range 循环里取变量地址,是否重复取决于循环变量是用 := 声明还是用 = 复用,以及模块采用的 Go 版本。本文用切片副本、切片元素地址和旧版本兼容写法说明如何判断与修复。501 收藏 -
围绕 Go net.Conn 写入超时排查一个常见误区:SetWriteDeadline 只约束当前连接的 I/O 截止时间,还要正确处理 n、err、缓冲写入和连接复用,才能判断请求是否真正收口。501 收藏 -
Go 1.22 引入的 base64.Encoding.AppendEncode 会把编码结果追加到已有 dst,而不是要求调用方先单独分配输出切片。本文用请求令牌拼接场景拆开 dst 前缀、EncodedLen 容量预估、append 扩容和输入边界,给出可核对的最小写法。501 收藏 -
用 httptrace.ClientTrace 的 GotConnInfo 判断 Go HTTP 请求拿到的是新连接还是曾经使用过的连接,并区分 WasIdle、IdleTime 与请求体关闭时机。501 收藏 -
netip.Prefix.Contains 判断网段时,结果异常通常不是位运算错了,而是 IPv4 与 IPv6 地址族、未规范化前缀或无效掩码混在了一起。本文用最小代码复现这些边界,并给出稳定的解析、规范化和测试方法。501 收藏 -
介绍 gojq RunWithContext 的查询取消方法,提供超时与迭代错误处理示例,区分停止等待和停止计算,说明扩展调用、结果限制与部分结果的边界。500 收藏 -
Gonum quad 处理无限区间时,通常应保留 rule=nil,让 Fixed 自动把无限边界变换到有限区间;只有被积函数明确带有 e^(-x^2) 权重时,才考虑 Hermite。本文按区间、权函数和收敛性拆解规则选择。500 收藏 -
Go collate.Numeric 可让名称中的连续数字按数值排序。本文给出记录排序代码,说明语言选项、相等项处理及分页范围,并区分自然数字排序与金额、版本号解析。500 收藏 -
Go 的 iter.Pull 可以把 iter.Seq 这种推送式迭代器转换为 next 和 stop 两个主动拉取函数。本文用一个小型筛选场景说明 ok 结束信号、提前停止和 defer stop 的正确边界。500 收藏 -
Go crypto/mldsa 可以用 Options.Context 区分同一把密钥下的不同业务签名。本文从业务串域的故障现象切入,说明 Context 的长度边界、签名与验签必须保持一致的原因,以及如何用版本化上下文避免跨业务误验签。500 收藏 -
Go HTTP Range 请求返回 200,可能因处理器未实现范围响应,也可能是 If-Range 失配后的正常回退。通过原创 ServeContent 示例讲清请求条件、响应字段、续传交互与代理压缩边界。500 收藏 -
Go 请求变慢时,先把主机名解析和拿到 IP 后的连接分别计时,再用 net.Resolver 的 PreferGo 与 Dial 判断解析器路径,避免把 DNS 问题误判成 TCP 或业务代码问题。500 收藏