Go语言技术文章
-
Go 出现 verifying module: checksum mismatch 时,先保留模块路径和版本,核对 go.mod、go.sum、本地模块缓存,再检查 GOPROXY、GOSUMDB 与 GOPRIVATE。本文给出不误删校验记录的排查顺序和恢复动作。104 收藏 -
Golang · Go教程 | 1星期前 | 性能优化 · Go教程 · go strings.Builder Go Builder Grow Go 字符串预留容量 Go Builder 扩容 Go UTF-8 字节长度
Go strings.Builder Grow 预留容量后仍扩容,通常是把追加字节预算误当成最终总容量,或漏算 UTF-8 字节、分隔符和后续写入。本文用 Len、Cap 和实际字节长度拆解原因,并给出可复用的检查方法。104 收藏 -
Go 中同一个 os.File 先写后读时,读到 EOF 往往不是文件没有内容,而是文件偏移已经停在末尾。本文用可运行示例拆解 Seek、ReadAt 和偏移复位的差异,说明何时共享游标、何时使用定位读取。103 收藏 -
Go 的 subtle.ConstantTimeCompare 不只是在比较字节内容,输入长度不同也会直接影响结果。本文用可运行示例说明长度边界、常量时间语义和密钥校验中的正确写法。103 收藏 -
Go 1.27 会把 go.mod 中多个 require 块整理成直接依赖和间接依赖两组。本文说明 tidy 的边界、哪些依赖会被标记 indirect,以及升级后如何检查差异。103 收藏 -
Go 1.27 的运行时针对小对象分配做了专项优化。本文围绕官方给出的 80B 阈值,说明它影响的对象范围、适合怎样判断收益,以及为什么不能把版本说明直接当成业务性能承诺。103 收藏 -
解释 Go 1.27.0 中泛型方法使用指针别名接收者时为何会生成无法解析的链接符号,并给出 1.27.1 升级、识别与回归检查边界。103 收藏 -
MaxIdleConnsPerHost 只限制单个 host 的空闲 keep-alive 连接;需要总连接上限时应使用 MaxConnsPerHost,并区分 HTTP/2 流与业务并发。103 收藏 -
用 net.Resolver.LookupHost 配合 context.WithTimeout 给 DNS 查询单独设定预算,并通过 DNSError、Timeout、Temporary 和上下文错误区分重试、取消与域名不存在。103 收藏 -
Go 类型断言返回 ok=true,只能说明接口里的动态类型匹配,不能证明断言得到的指针非 nil。本文用 typed nil 示例拆解接口值、断言结果和方法调用的边界,并给出 nil 与 error 的安全处理写法。103 收藏 -
Go 使用 bufio.Writer 写文件时,Write 成功不等于内容已经落盘。本文拆开 Flush、Sync、Close 的责任边界,并给出可返回错误的关闭流程与最终内容校验方法。103 收藏 -
用 go mod why 按包或模块读取从主模块到目标依赖的最短导入路径,理解 -m、-vendor、未引用提示与 go mod graph 的边界。103 收藏 -
用 Go os.CreateTemp 创建临时文件时,创建、写入、关闭和删除是四个不同责任。本文给出一套保留原始错误、无论成功失败都清理文件的实践写法。103 收藏 -
Go 1.22 引入的 database/sql.Null[T] 用 V 保存值、用 Valid 表示数据库 NULL。本文用可运行示例解释 Scan(nil)、Scan(0) 与 Value() 的边界,避免把零值误当成空值。102 收藏 -
Go text/template 默认可能忽略缺失 map 键。本文比较 missingkey 的三种策略,示范如何让必填键在 Execute 阶段直接返回错误,并处理可选字段。102 收藏