Go语言技术文章
-
Go 的 http.NewRequest 不能只看 ContentLength=0 判断 body 是否为空。本文对比 nil、http.NoBody、空 bytes.Reader/strings.Reader 与自定义 Reader,说明 Request.Body、ContentLength、GetBody 的组合语义,并给出可直接复用的判断代码。478 收藏 -
用 bufio.Reader.Peek 预读固定长度协议头时,读取位置不会前移;继续使用同一个 Reader 消费正文即可。文章同时给出复制预读字节、处理 ErrBufferFull 与 io.EOF 的边界方案。478 收藏 -
在 Go 的 text/template 模板里,条件语句(比如 {{if}})两侧通常会把原本的换行符一并保留下来,所以渲染结果里很容易莫名多出几行空白;想把这类空白控制住,就得用 {{-(左去空白)和 -}}(右去空白)这套语法,按位置精确裁掉多余字符,让最终输出更紧凑,也不会夹带冗余换行。 在477 收藏 -
解释 Go net.IP.Equal 如何处理 4 字节 IPv4 与 IPv4-mapped IPv6,结合 To4 和 16 字节表示说明比较、规范化与边界判断。477 收藏 -
用 Go 的 encoding/hex 把二进制 ID 转成稳定的小写十六进制文本,并说明 DecodeString 的输入边界、错误处理和预分配写法。477 收藏 -
Go select 可以用 nil channel 动态屏蔽一个通信分支:初始设为 nil,启用时切换为有效 channel,停用或关闭后再置 nil。本文说明 select 的重算边界、关闭处理和 default 常见坑。477 收藏 -
runtime.GOMAXPROCS 限制的是同时执行用户级 Go 代码的并行度,不是操作系统线程总数。本文用 G、P、M 和阻塞系统调用说明线程数为何可能高于设置值,并给出容器与本地程序的排查顺序。477 收藏 -
Go context.WithDeadline 派生子上下文时,deadline 只能更早不能延后。本文用原创示例说明父子截止时间、cancel 释放、Err 判断和多层预算的边界。477 收藏 -
Go 测试包中 embed 文件读不到时,先区分编译期模式匹配、embed.FS 内部路径和 os.ReadFile 工作目录三个边界,再用 go list 查看 TestEmbedPatterns 与 XTestEmbedPatterns,快速定位测试资源归属。477 收藏 -
math/big 的 Int 运算通常不会像机器整数一样溢出,异常多出现在 Int64/Uint64 转换、big.Float 精度舍入或接收者复用。本文给出一套可检查的定位方法。477 收藏 -
Go 1.26 放宽了 new 的参数限制,可以直接用 new(expr) 创建带初始值的指针。本文用可选字段、版本门槛和迁移验证说明它解决什么问题,以及什么时候不该急着改写。476 收藏 -
Go 的 slices.SortStableFunc 会在比较结果相等时保留原顺序,适合按单一字段排序又要维护同组先后关系的场景。本文用订单优先级示例拆解比较函数、稳定性和空切片边界。476 收藏 -
Go 的 io.ReadFull 读取固定长度数据时,EOF 表示一个字节都没读到,UnexpectedEOF 表示已读到部分数据后提前结束。本文用 n 和 err 设计可靠的错误分支,并说明如何放进固定长度协议解析。476 收藏 -
用 Go 的 io.TeeReader 把请求体读取和 SHA-256 摘要计算接在同一条流上,说明 io.Copy、Sum 调用时机,以及绕过包装 Reader 时的常见错误。476 收藏 -
Go range 中把循环变量地址放入指针切片,旧语言语义下可能出现地址相同和值被覆盖。本文拆开副本、作用域和 Go 版本差异,并给出指向原元素与独立副本的两种稳定写法。476 收藏