Go语言技术文章
-
Go 反向代理中,URL.Host 决定连接哪个上游,Request.Host 决定发送哪个 Host 头。本文说明服务端读取、客户端转发、端口和安全校验的边界。392 收藏 -
Go ascii85.Decode 需要同时看 ndst、nsrc、flush 和 err。本文说明分块读取时如何保留未完成尾块,并在流结束时区分正常短块、单字符截断和非法 ASCII85 字符。392 收藏 -
用 Go mime/multipart.Reader.NextPart 逐段读取 multipart 表单,通过 FormName 和 FileName 区分普通字段与文件字段,并正确处理 io.EOF、读取边界和常见误区。392 收藏 -
用Go crypto/hpke单次Seal与Open包装应用会话密钥,解释enc、密文和明文密钥的区别,并说明info、状态上下文、身份认证与重放处理边界。392 收藏 -
Go 的 log/slog 用 WithGroup 给字段划分命名空间,但 With、WithGroup 和单次 LogAttrs 的先后顺序会影响最终结构。本文用一个请求日志例子说明字段如何继承、重复键如何处理,以及自定义 Handler 应该怎样保持同样的语义。391 收藏 -
Go 1.22 改变了 range 循环变量的作用域。本文用 goroutine 闭包示例说明旧写法为何会读到同一个值、go.mod 如何决定语义,以及升级后怎样验证和清理多余代码。391 收藏 -
线上 Go 接口偶发超时,通常不是把超时时间调大就能解决。本文用一个订单查询场景演示如何沿 context 从 Handler 传到下游调用,结合日志和取消信号定位未结束的请求,并给出回滚与告警检查方法。391 收藏 -
reflect.VisibleFields 可以按 Go 的字段可见性规则枚举结构体字段,连同嵌入字段也能得到稳定的 Index 路径。本文用一个审计结构体示例说明如何读取字段、区分匿名字段和未导出字段,并处理重名与空结果边界。391 收藏 -
Go 解析 JSON 大整数时,map[string]any 默认会把数字放入 float64,可能改写末尾精度。本文比较结构体整数、json.Decoder.UseNumber 和字符串三种方案,帮助你按数据结构与运算需求选择正确做法。391 收藏 -
用 Go maps.Copy 合并默认配置和覆盖配置,明确 dst/src 的覆盖方向,处理 nil 目标 map,并说明嵌套切片等值的浅复制边界。391 收藏 -
Go net/netip 比较 IPv4 与 IPv4-mapped IPv6 时,应先用 Unmap 统一表示,再按 Addr 或 AddrPort 选择等值判断;本文说明 Is4、Is6、Is4In6、Compare 与端口边界。391 收藏 -
用 Go atomic.Int64.Add 的新值返回语义封装并发序号生成器,并说明顺序、溢出、复制和跨进程使用边界。391 收藏 -
Go errors.As 的关键不是把错误再断言一次,而是按 error 实现方式声明目标变量。本文区分值错误和指针错误,说明包装后为何要传入 *T 或 **T,并给出排查清单。391 收藏 -
Go DNS 查询失败时,用 errors.As 找到 *net.DNSError,再区分 IsNotFound、Timeout 与 Temporary,决定停止、有限重试还是继续排查。391 收藏 -
讲清 iter.Pull2 的 next、stop 与外部 Err 查询顺序,用单次键值源示例避免提前退出后的资源泄漏、漏错和并发误用。391 收藏