Go语言技术文章
-
bufio.Reader.ReadBytes 找不到分隔符就会同时返回已读片段和错误。本文以带读取期限的长连接为例,说明怎样保留超时返回的数据,在同一个 Reader 上延长 deadline 后继续拼接,并区分临时超时、EOF 与不可恢复错误。390 收藏 -
Go 1.27 的 encoding/json/v2 默认拒绝 JSON 重复键。本文用批处理示例说明严格模式、遗留兼容开关、结构体复用和分配测量的边界。390 收藏 -
Go plan9obj.Section 的两个读取者应分别调用 Open,以隔离各自的 Seek 游标。本文对比共享读取器、独立 Open 和 ReadAt,给出窗口读取示例,并说明底层文件寿命与关闭责任。390 收藏 -
Go reflect.TypeFor可直接取得泛型类型参数的反射类型。本文对比TypeOf动态值语义,提供批次外构建类型计划的示例,说明字段元数据复用、兼容写法和分配结论的边界。390 收藏 -
说明 Go net/http 中 Client 与 Transport 的复用关系,解释 Response.Body 为什么必须关闭,以及完整读取、限制读取和直接关闭对 HTTP/1 连接复用的影响。390 收藏 -
通过 go mod download -json 固定模块版本并取得缓存目录,再用 go doc 的 -u、-ex、-all 组合查看未导出符号与可执行示例,避免版本和包目录定位错误。390 收藏 -
通过共享 sync.Once 协调正常收尾与 context.AfterFunc 取消回调,解释 stop 返回值、清理完成与回调退出的区别,给出完整竞争示例和资源使用边界。390 收藏 -
Go 1.25 为 sync.WaitGroup 增加 Go 方法,把 Add、启动 goroutine 和 Done 收拢到一个调用。本文用迁移场景说明 WaitGroup.Go 的任务计数语义、panic 与错误边界、嵌套任务时序,以及如何配合信号量真正限制并发数量。390 收藏 -
io.Copy 返回的 written 和 err 需要一起判断:written 大于零且 err 非 nil 代表目标可能只收到部分数据。本文说明 EOF 语义、目标端提前失败、重试边界和可控示例。390 收藏 -
用一个可迁移的 Go 泛型 API 例子,解释约束中的 ~T 如何放宽命名类型匹配范围,以及它对调用方兼容性、返回值设计和后续演进的影响。389 收藏 -
解释 Go context 取消后 goroutine 仍可能继续工作的原因,给出 select 监听、资源释放、退出确认和可复现检查方法。389 收藏 -
Go 原生 fuzz 测试的可复现性取决于 seed corpus 管理。本文区分 F.Add、testdata/fuzz 和 GOCACHE/fuzz,说明如何保留固定边界样例、沉淀失败输入并用 go test 稳定回放。389 收藏 -
Go csv.FieldPos 的 column 按 UTF-8 字节计算,不按字符计算。本文用中文 CSV 说明字段起点、解析错误和展示层字符位置如何分开处理。389 收藏 -
讲解 Go multipart 上传文件名的安全处理:原名只作展示,限制请求体,按内容识别类型,生成随机存储名,并用 O_EXCL 防止覆盖已有文件。389 收藏 -
Go SHA-512 的 Sum 会在已有切片末尾追加二进制摘要。通过报文前缀示例区分 Write 输入与结果前缀,说明返回值、长度容量、摘要区间和十六进制文本的不同。389 收藏