Go语言技术文章
-
Go 1.27 为 go/scanner.Scanner 增加 End 方法。本文用 token.Pos、token.File.Offset 和半开区间说明它如何给源码分析工具提供可靠的 token 结束位置,避免继续手算偏移。155 收藏 -
Go 的 defer 可能在函数真正返回前修改命名返回值。本文用错误包装场景拆开 return 与 defer 的执行顺序,并给出显式返回、只读观测和测试检查的实用写法。155 收藏 -
GOPROXY=off 不是使用本地缓存的开关,而是禁止 go 命令从任何来源下载模块。本文从 GOMODCACHE、go.sum、vendor 和 file 代理几个边界说明新依赖失败的原因,并给出可复现的离线构建处理方式。155 收藏 -
Go encoding/csv 开启 ReuseRecord 后,Read 返回的记录切片可能与下一次读取共享底层数组。本文用 goroutine 场景说明何时复制 []string,以及如何避免异步任务读到被覆盖的数据。155 收藏 -
在 Go 的 cgo 代码里,C.GoString 适合读取以 NUL 结尾的 char*,C.GoStringN 适合长度明确的数据;反向使用 C.CString 时还要释放 C 堆内存。本文用一个小示例把三种边界讲清楚。155 收藏 -
Go 的 sql.Stmt 可以被多个 goroutine 并发使用,但 Close 不等于取消查询。本文说明正在执行、Rows 返回后和优雅停机时的正确关闭顺序。155 收藏 -
Go 的 archive/tar 适合流式读取归档。本文区分 Header 与 payload,演示只保留文件头元数据、用固定缓冲区消费内容,并说明超大条目和异常归档的内存控制边界。155 收藏 -
Go 的 net.Resolver.LookupAddr 反向解析返回的是名称切片,遇到多个 PTR、部分结果、无记录或超时不能只判断一个字符串。本文用带超时的示例说明如何保留可用结果、分类处理错误,并把结果整理成稳定日志字段。155 收藏 -
Go 泛型约束写了具体类型,却不代表类型参数拥有该类型的全部方法。本文从类型集、方法集和接口约束的边界出发,解释常见编译错误,给出可运行的修复写法,并说明什么时候该把行为写进约束。154 收藏 -
用 Go 的 slog.LogValuer 控制日志字段的延迟求值与脱敏,厘清日志级别过滤、LogValue、slog.String 和 slog.Group 的调用边界。154 收藏 -
Go 1.24 的 strings.SplitSeq 返回单次消费的字符串迭代器,适合只遍历不保存结果的场景。本文对比 strings.Split 与 SplitSeq 的消费方式,核对连续分隔符、空字符串和提前 break 等边界。154 收藏 -
Go 中 os.Rename 在同一文件系统里适合做临时文件提交,但跨文件系统时可能返回 invalid cross-device link。本文从错误现场出发,写出可检查、可回退、不会把半成品当正式文件的保存流程。154 收藏 -
使用一个 Go log.Logger 统一格式,再通过 io.MultiWriter 同时写入标准输出和文件;本文还说明写入错误短路、并发安全与 Close 生命周期边界。154 收藏 -
讲清 bytes.Buffer 处理分段响应时 Len、Cap、Grow、Reset 和 Bytes 的边界,给出复用同一缓冲区、复制别名数据和隔离并发请求的实战写法。154 收藏 -
解释 Go database/sql 中 Tx.Stmt 复用 DB 级预处理语句时的对象归属、事务绑定、关闭责任、上下文与并发边界。154 收藏