Go语言技术文章
-
用 Go 包装 io.Reader,在不把整文件读入内存的前提下统计上传过程中已经读取的字节数。本文区分 Reader 进度、网络发送和服务端落盘边界,给出并发读取进度、失败重试与未知总大小的处理方式。127 收藏 -
Go replace 只改变模块源码的解析位置,不会绕过 internal 的导入边界。本文用 go.mod、import path 和 go list 说明本地替换、模块改名及公共包迁移的处理方法。127 收藏 -
Go filepath.WalkDir 默认不会跟随符号链接。本文用一个目录扫描器说明如何识别链接、保留链接记录,并区分 os.Stat 与 EvalSymlinks 的显式跟随行为。127 收藏 -
介绍 Go testing.T Cleanup 的登记方式、后进先出顺序、父子测试作用域和并行测试中的资源清理边界。127 收藏 -
Go 处理超大 JSON 数组时,不要先 Unmarshal 成完整切片。本文用 json.Decoder.Token、More 和 Decode 按元素流式消费,并说明数字精度、嵌套结构与错误边界。127 收藏 -
Go 创建文件时,传入的 perm 会先受进程 umask 过滤;os.Chmod 修改已有文件时则直接设置权限位。本文用公式、示例和安全流程说明两者边界。127 收藏 -
Go 1.26 的 errors.AsType 用泛型类型参数从包装错误和错误树中提取具体类型,本文说明指针和值、遍历顺序、自定义 As 方法及生产排查边界。127 收藏 -
Go 依赖扫描命中漏洞但 govulncheck 未发现可达调用时,本文给出升级与临时豁免的判断矩阵、证据清单、到期机制和复扫方法。127 收藏 -
通过 NewOption 配对中文标签与稳定编码,用 Select 泛型和 Value 指针绑定接收业务值,结合最小示例说明默认值、错误处理和任务消费边界。127 收藏 -
Go 1.24 提供了 os.Root。本文说明如何用 os.OpenRoot 建立目录边界,再通过 Root.Open 打开相对文件,并区分普通子路径、目录回退、越界路径和符号链接的处理方式。127 收藏 -
Go embed 匹配为空时,先确认 go:embed 所在包目录,再检查模式、隐藏文件规则和 embed.FS 的树内读取路径。本文用一个小目录说明编译期匹配与运行时读取的边界。127 收藏 -
Go encoding/xml 映射命名空间失败时,关键不是记住 XML 前缀,而是让结构体标签匹配命名空间 URI。本文用 XMLName、xml.Name 和 Decoder.Token 逐层定位字段为空的原因。127 收藏 -
testing/synctest bubble 使用独立虚拟时钟,只有当所有 goroutine 都进入持久阻塞时才跳到下一个定时器时刻。本文比较真实时钟、手写 fake clock 与 synctest 的边界,并用原创示例说明 Wait、Sleep、外部 I/O 和根 goroutine 退出的影响。127 收藏 -
从切片别名、append 扩容和底层数组保留三个角度,说明 Go slices.Clone 的适用边界,并用可运行示例验证复制后的修改、nil 语义与内存释放判断。126 收藏 -
Go 的 QueryRow 适合读取预期只有一行的结果,但它不会替你限制 SQL 返回多少行。本文用 WHERE、LIMIT 1、Scan、sql.ErrNoRows 和 QueryRowContext 说明单行查询的范围与错误边界。126 收藏