Go语言技术文章
-
Go 的 channel range 只有在通道关闭后才会退出。本文从单发送者、多发送者和接收端提前退出三个场景说明 close 的责任边界,避免 range 卡住与 send on closed channel。105 收藏 -
Go net.Resolver.LookupIP 取消后,标准库不会把半截地址列表作为成功结果返回。本文解释 Context 取消、并发共享查找、旧切片复用和错误判断之间的关系,并给出安全的地址缓存与排查写法。105 收藏 -
B.Loop 只负责迭代与计时,不会恢复循环外可变状态。切片长度、容量、map 内容或缓冲区会跨轮累积,导致每次操作不再等价。本文用可运行示例区分新建成本与复用成本,并说明重置是否计时。105 收藏 -
Go sync.Cond 的关键不是把 Signal 换成 Broadcast,而是让等待条件、互斥锁和唤醒范围保持一致。本文从有界队列场景出发,拆解 Wait 的循环写法、Signal 与 Broadcast 的选择、丢唤醒风险和可验证的测试边界。104 收藏 -
Go 客户端连续调用登录接口和业务接口时,应复用同一个配置了 cookiejar.Jar 的 http.Client。本文说明 Cookie 的域名、路径、协议和过期边界,并给出公共后缀列表、多账号隔离与内存持久化注意事项。104 收藏 -
Go 出现 verifying module: checksum mismatch 时,先保留模块路径和版本,核对 go.mod、go.sum、本地模块缓存,再检查 GOPROXY、GOSUMDB 与 GOPRIVATE。本文给出不误删校验记录的排查顺序和恢复动作。104 收藏 -
Golang · Go教程 | 4星期前 | 性能优化 · Go教程 · go strings.Builder Go Builder Grow Go 字符串预留容量 Go Builder 扩容 Go UTF-8 字节长度
Go strings.Builder Grow 预留容量后仍扩容,通常是把追加字节预算误当成最终总容量,或漏算 UTF-8 字节、分隔符和后续写入。本文用 Len、Cap 和实际字节长度拆解原因,并给出可复用的检查方法。104 收藏 -
Go标准库flag可通过自定义Value累积同名参数。本文实现顺序保留的字符串切片类型,说明Set调用、零值String、FlagSet错误处理与参数终止边界。104 收藏 -
Go goroutine 泄漏不能靠单次数量下结论。本文给出受控 pprof 端点、基线与增量样本、debug 文本栈和负载记录的组合方法,用持续增长堆栈定位阻塞点并完成修复复测。104 收藏 -
用 Go 1.24 的 os.OpenRoot 建立插件目录边界,通过 Root 方法和 Root.FS 读取相对文件,处理路径遍历、符号链接、资源关闭及挂载点等实际限制。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 收藏