Go语言技术文章
-
Go io.ReadAtLeast 会根据已读字节数、min 和缓冲区长度返回不同结果。本文从固定长度读取故障出发,拆解短读、EOF、ErrUnexpectedEOF 与 ErrShortBuffer 的判断方式,并给出可复用的修复和防复发写法。342 收藏 -
说明 Go ast.PreorderStack 如何把祖先节点栈传给回调,解释 stack 不含当前节点、返回 false 跳过子树和初始栈参数的边界,并对比 Preorder 与 Inspect。341 收藏 -
Go archive/zip.Writer.Copy 能把已有 ZIP 条目的 raw form 直接搬到新归档,避免未修改内容重复解压和压缩。本文给出重打包示例,并划清 Copy、CreateHeader、CreateRaw 与 Writer.Close 的使用边界。341 收藏 -
runtime.KeepAlive 本身没有错误返回值。本文从受保护的资源操作入手,说明如何保留 n 和 err,再用 errors.Is、errors.As 区分中断、句柄失效与其他底层原因,并把 KeepAlive 放在正确的生命周期边界。341 收藏 -
用 Go os.Root 和 Root.Open 把外部文件名限制在可信目录树内,说明 OpenFile、Root.FS、资源关闭与挂载边界。339 收藏 -
Go 1.23 的 slices.Chunk 返回的是源切片的连续子切片视图:直接改元素会影响原切片,但每个分块的容量被限制为长度,append 不会沿用这段容量改写源数据。需要独立分块时使用 slices.Clone。337 收藏 -
Go http.Request.GetBody 不是当前请求体的别名,而是为客户端重定向或手动重试重新生成请求体的工厂。本文说明 NewRequest 何时自动填充它,以及自定义 io.Reader 如何保留可重放能力。332 收藏 -
go test -shuffle 暴露资源残留时,如何识别共享夹具的顺序依赖,用测试作用域管理文件与后台任务,并保存种子复查清理结果。332 收藏 -
Go 指针接收者方法能否由值变量调用,取决于方法集和可寻址性。本文用方法集、接口实现与函数返回值边界解释报错原因,并给出接收者设计建议。331 收藏 -
围绕 Go sync.Pool 结果不稳定的常见现象,解释 Get 的任意取值、对象自动移除、初始化清理、所有权边界和业务状态选型,给出可复用的缓冲区排查思路。331 收藏 -
用 Go database/sql 调用带 OUT 或 INOUT 参数的存储过程时,掌握 sql.Out、Dest 和 In 的绑定关系,配合 ExecContext 与驱动能力排查,避免输出值无法回写。330 收藏 -
Go database/sql 驱动只有在连接已确认失效且操作不可能重复执行时才应返回 driver.ErrBadConn。本文解释 database/sql 的重试边界、驱动实现位置,以及业务代码为什么要保留结果不确定时的原始错误。329 收藏 -
Go net.Dialer.Control 提供了真正拨号前接触底层连接的入口。本文用 syscall.RawConn.Control 说明如何在回调内读取或设置 socket 参数、传递错误,并处理网络名变化与文件描述符生命周期边界。328 收藏 -
Go TLS 的 MinVersion 限定协议协商下限,旧客户端最高版本不足时会因无共同版本握手失败。本文给出服务端配置示例,说明证书、TLS 终止点、日志与版本组合排查方法。327 收藏 -
reflect.Value.MapIndex 找不到键时返回的是无效的 zero Value,不应直接调用 Interface、Kind 或 Elem。本文说明怎样用 IsValid 判断缺失键,区分元素零值与缺失键,并处理 nil map、key 类型和并发访问边界。326 收藏