Go语言技术文章
-
Go 的 range 读 Channel 不会因为暂时没有消息而结束,只有发送方关闭通道才会收到结束信号。本文从阻塞复现、单发送者关闭、多发送者协调和提前退出取消四个场景,整理一套不 panic、不泄漏的收尾方式。101 收藏 -
Golang · Go教程 | 2星期前 | 单元测试 · 错误处理 · Go教程 · go bytes.Buffer Go flag.FlagSet Go SetOutput Go 捕获命令行错误 Go ContinueOnError
使用 Go flag.FlagSet 和 bytes.Buffer 捕获命令行解析错误,讲清 SetOutput、ContinueOnError、ErrHelp 与测试隔离的配合方式。101 收藏 -
Go 的 csv.Reader 默认会根据第一条记录检查后续列数。面对可选尾部字段或多版本 CSV,可把 FieldsPerRecord 设为 -1,再在业务层校验最少列、最大列和扩展字段,兼顾兼容性与数据质量。101 收藏 -
一个全局 QPS 阈值只能挡住总流量,挡不住单个租户或重接口挤占资源。本文用 Go 的令牌桶限流器拆解全局、租户、接口三层配额的取舍、最小实现和观察指标。100 收藏 -
Golang · Go问答 | 2个月前 | 配置 · 设计模式 · 架构 · Go问答 · 代码重构 · Go 默认值 配置参数 参数校验 构造函数 option Functional Options
Go 的构造函数参数从 3 个长到 8 个后,直接继续加位置参数会让调用点难读也难兼容。Functional Options 能把可选配置变成具名、可组合的设置项,但它不适合承载必填依赖或运行期变更。本文给出最小实现、交叉校验和选择清单。100 收藏 -
Go HTTP/1 服务处理流式上传时,如果边读请求体边写响应,默认行为可能让两边互相等待。本文用 ResponseController.EnableFullDuplex 拆开触发条件、最小写法、HTTP/2 差异和超时边界。100 收藏 -
用 Go 泛型约束实现一个可复用的分组聚合函数,拆解 key 提取、map 累积、append 合并和结果校验,兼顾类型安全与调用体验。100 收藏 -
Go 里 iter.Seq 是惰性遍历函数,slices.Collect 会把它完整收集成切片。文章用一个分页数据场景说明如何提前停止、如何估算内存,以及什么时候不该直接 Collect。100 收藏 -
Go 测试需要共享临时目录、测试服务或客户端时,可以用 TestMain 统一初始化和清理。本文说明如何保存 m.Run 的退出码、区分夹具初始化失败与测试失败,并避开 os.Exit 跳过 defer 的清理陷阱。100 收藏 -
Go bufio.Scanner 读取超长行时,关键是在第一次 Scan 前调用 Buffer 设置初始缓冲区和最大 token 大小,并为换行符预留空间;如果行长不可控或需要恢复,则应改用 bufio.Reader。100 收藏 -
Go 的缓冲 channel 满载后,普通发送会等待消费者。用 select 同时监听 ch <- value 与 ctx.Done(),就能在取消或超时后返回 ctx.Err,避免生产者 goroutine 一直卡住。100 收藏 -
Go context.WithCancel 的父子关系是单向取消传播:父 context 取消会让子 context 和后代一起结束,子 context 取消不会影响父 context 或兄弟节点。本文用代码说明 Done、Err、cancel 和资源释放边界。100 收藏 -
通过 net.Resolver 的 Dial 为单次 Go DNS 查询指定服务器 IP,配合 PreferGo、context 超时和 LookupHost 处理 UDP/TCP、取消及错误边界。100 收藏 -
Golang · Go问答 | 3星期前 | 错误处理 · 文件读取 · Go问答 · Go errors.Join Go deferclose Go defer Close错误 Go关闭文件返回值 Go文件读取错误处理
围绕 Go 中 defer 调用 Close 的常见写法,说明如何接住关闭返回值、区分主错误与关闭错误,并处理循环资源释放和 errors.Join。100 收藏 -
讲清 Go 1.22 cmp.Or 的 comparable 泛型约束、候选值顺序和零值语义,并用泛型辅助函数组合字符串、数值与指针默认值。100 收藏