Go问答技术文章
-
MaxIdleConnsPerHost 只限制单个 host 的空闲 keep-alive 连接;需要总连接上限时应使用 MaxConnsPerHost,并区分 HTTP/2 流与业务并发。103 收藏 -
Go 类型断言返回 ok=true,只能说明接口里的动态类型匹配,不能证明断言得到的指针非 nil。本文用 typed nil 示例拆解接口值、断言结果和方法调用的边界,并给出 nil 与 error 的安全处理写法。103 收藏 -
Go 使用 bufio.Writer 写文件时,Write 成功不等于内容已经落盘。本文拆开 Flush、Sync、Close 的责任边界,并给出可返回错误的关闭流程与最终内容校验方法。103 收藏 -
Golang · Go问答 | 2个月前 | 并发安全 · RWMutex · sync.Map · Go问答 · map并发 · RWMutex sync.Map Go问答 Go map并发读写 concurrent map writes
Go map 不是并发安全容器,多个 goroutine 同时写或读写交错时可能触发 fatal error。本文从线上 panic 现场出发,说明如何复现、定位原因,并在 RWMutex、sync.Map 和单 owner 模型之间做选择。102 收藏 -
Go 1.22 引入的 database/sql.Null[T] 用 V 保存值、用 Valid 表示数据库 NULL。本文用可运行示例解释 Scan(nil)、Scan(0) 与 Value() 的边界,避免把零值误当成空值。102 收藏 -
Go 泛型类型推断不会单独替你选择更窄的类型范围:实参或上下文先给出候选类型,约束再检查它是否允许。本文比较 any、方法约束和类型集合约束,并说明推断失败时的显式写法。102 收藏 -
Go 的 range 读 Channel 不会因为暂时没有消息而结束,只有发送方关闭通道才会收到结束信号。本文从阻塞复现、单发送者关闭、多发送者协调和提前退出取消四个场景,整理一套不 panic、不泄漏的收尾方式。101 收藏 -
Golang · Go问答 | 1个月前 | 配置 · 设计模式 · 架构 · Go问答 · 代码重构 · Go 默认值 配置参数 参数校验 构造函数 option Functional Options
Go 的构造函数参数从 3 个长到 8 个后,直接继续加位置参数会让调用点难读也难兼容。Functional Options 能把可选配置变成具名、可组合的设置项,但它不适合承载必填依赖或运行期变更。本文给出最小实现、交叉校验和选择清单。100 收藏 -
Go HTTP/1 服务处理流式上传时,如果边读请求体边写响应,默认行为可能让两边互相等待。本文用 ResponseController.EnableFullDuplex 拆开触发条件、最小写法、HTTP/2 差异和超时边界。100 收藏 -
Go 里 iter.Seq 是惰性遍历函数,slices.Collect 会把它完整收集成切片。文章用一个分页数据场景说明如何提前停止、如何估算内存,以及什么时候不该直接 Collect。100 收藏 -
Go 的缓冲 channel 满载后,普通发送会等待消费者。用 select 同时监听 ch <- value 与 ctx.Done(),就能在取消或超时后返回 ctx.Err,避免生产者 goroutine 一直卡住。100 收藏 -
Go context.WithCancel 的父子关系是单向取消传播:父 context 取消会让子 context 和后代一起结束,子 context 取消不会影响父 context 或兄弟节点。本文用代码说明 Done、Err、cancel 和资源释放边界。100 收藏 -
Golang · Go问答 | 1天前 | 错误处理 · 文件读取 · Go问答 · Go资源清理 · defer用法 · Go errors.Join Go deferclose Go defer Close错误 Go关闭文件返回值 Go文件读取错误处理
围绕 Go 中 defer 调用 Close 的常见写法,说明如何接住关闭返回值、区分主错误与关闭错误,并处理循环资源释放和 errors.Join。100 收藏