Go语言技术文章
-
用 Context.Deadline 和 time.Until 计算 Go context.WithDeadline 的有效剩余时间,并区分无 deadline、提前取消、已经超时以及父 Context 更早截止等边界。168 收藏 -
Go sync.Cond.Wait 必须在持有 Cond.L 时调用。本文说明 Wait 原子释放与重新加锁的边界、为什么要用 for 重新检查条件,以及状态修改、通知和 channel 选择的实用判断。164 收藏 -
Go net/http.Transport结果不稳定时,先区分传输错误、HTTP状态与正文变化。文章说明连接复用和响应体处理误区,给出有界GET诊断示例,并用httptrace记录复用线索。163 收藏 -
Go go toolchain 看起来没有释放时,先区分命令进程与模块缓存。本文按工具链选择、GOMODCACHE、GOCACHE 和进程观察逐层排查,说明什么时候清理缓存,什么时候应该继续查启动器或 CI 任务。155 收藏 -
filepath.WalkDir 不提供 Root 参数。本文说明怎样将严格根目录遍历迁移到 fs.WalkDir(root.FS()),给出有限读取、文件关闭和摘要计算示例,并解释平台及资源边界。154 收藏 -
Go 1.21 起,crypto/tls 提供 QUICServer 与 QUICConn,负责 TLS 握手这一层,不替代 QUIC 的 UDP 拥塞控制与数据包调度。本文从资产、信任边界和事件循环出发,说明服务端如何创建连接、处理握手事件与安全关闭。153 收藏 -
Go 的 map 遍历顺序由语言规范明确为未指定,不能把某次输出顺序当成稳定结果。本文解释 range 的真实保证,并给出排序键后生成确定性输出的写法。153 收藏 -
Go regexp.Compile 会在解析阶段返回无效正则的错误。本文用一个规则加载器说明如何提前编译、保留错误上下文,并区分 Compile、MustCompile 与后续匹配校验。153 收藏 -
unique.Make 的第一道边界由 comparable 类型约束决定,第二道边界要由业务代码自己定义。本文用高并发标签去重场景拆开编译期约束、运行时校验、相等语义和并发使用方式,给出可直接复用的规范化入口。152 收藏 -
Go init 顺序变化通常不是 init 语法失效,而是包依赖、包级变量依赖、源文件呈现顺序或隐藏副作用发生了变化。本文给出排查边界,并用显式 Setup 替代关键启动动作。151 收藏 -
strconv.ParseInt 没有需要关闭的资源。批量解析后内存增长,应区分累计分配、当前堆和业务留存;通过有界错误摘要示例说明 NumError、输入文本和错误缓存的生命周期。150 收藏 -
Go unsafe.Pointer 本身不是 GC 失效的同义词,真正危险的是把地址转成 uintptr 后脱离指针语义长期保存,或在外部调用边界提前失去对象引用。本文按转换、生命周期、cgo 与排查边界说明安全写法。149 收藏 -
Go 的 crypto/rand.Read 与普通 io.Reader 不同,它会通过 io.ReadFull 填满整个目标切片。本文解释短读取契约的差异、正确生成随机字节的写法,以及自定义 Reader 时应该如何处理 n 和 error。148 收藏 -
Go os/exec.Cmd.ExtraFiles 可以把父进程已打开的文件交给子进程。本文用一个父子进程示例说明 ExtraFiles[0] 如何对应文件描述符 3、启动前后的关闭边界,以及 Windows 不适用时该怎么判断。148 收藏 -
Go 交叉编译时设置 CGO_ENABLED=0 后缺少实现,通常不是链接器突然丢了函数,而是带 import C 的文件被 cgo 构建约束排除。本文说明如何定位、补 !cgo 回退,或为目标平台准备 C 交叉工具链。148 收藏