Go语言技术文章
-
Go 的 http.Request.Trailer 不是普通请求头的即时副本。本文从读取时序出发,说明服务端为什么要等 Body 返回 EOF 后再取尾部字段,并给出声明字段、读取请求体和处理空值的实用写法。375 收藏 -
fsnotify 默认不会递归监听目录。本文从新建子目录后收不到文件事件的现象出发,说明如何先遍历已有目录,再在 Create 事件中识别新目录并调用 Add 补充监听,同时处理路径判断、重复 Add、删除重命名和 Close 生命周期。375 收藏 -
用 os.ReadDir 构建单层目录索引,以 fs.ValidPath 约束相对名称,区分本机路径与 io/fs 名称,并说明部分读取、目录分类和平台转换的处理边界。375 收藏 -
Go 中向已关闭 channel 发送会触发 panic。本文解释 close 后的发送、接收与再次关闭规则,并给出单生产者、多生产者和接收者提前退出时的安全责任划分。375 收藏 -
Go 的 go/doc/comment 包可以先把文档注释解析为 *comment.Doc,再由 comment.Printer.Markdown 输出 Markdown 字节。本文按一条完整工作流说明 Parser、Doc、Printer 的职责,以及标题层级、文档链接和输出边界的配置方式。375 收藏 -
说明 Go gzip.Writer.Close 为什么不能省略:它会完成压缩状态并写出 gzip 尾部信息。文章给出正确的 defer 关闭顺序,区分 Flush 与 Close,并整理读取不完整、底层关闭失败等排查边界。374 收藏 -
Go 二进制在 Alpine 启动失败时,应读取 ELF 架构、解释器和动态库需求,区分平台错误与 glibc/musl 不匹配。本文给出 readelf 排查命令,以及纯 Go 构建、musl 重编译和 glibc 运行环境的选择边界。374 收藏 -
Go 模块发布错误版本后,不要删除旧 tag 或覆盖原版本。本文说明如何在 go.mod 使用 retract 撤回单个版本或版本区间,为什么必须发布更高版本,以及如何用 go list 和 go get 核对撤回提示与兼容边界。374 收藏 -
Go strings.Builder 的容量优化关键不在盲目调用 Grow,而在于按最终文本的字节数估算预算、用 Len 和 Cap 观察结果,并把 String、Reset 与禁止复制非零 Builder 的边界分清。374 收藏 -
围绕 Go context.WithCancel 的生命周期,说明为什么创建后应立即 defer cancel,以及长任务如何让 worker 监听 Done 并正确收尾。374 收藏 -
netip.ParseAddrPort 不会为缺端口输入自动补值。本文将显式IP端点与裸IP分开,提供业务默认端口封装,保留空端口、越界端口和域名错误,并解释IPv6歧义、零端口及配置迁移边界。374 收藏 -
本文说明如何用带缓冲 channel 作为槽位池限制 Go 并发任务数,覆盖容量语义、槽位获取与释放、context 取消、WaitGroup 收尾,以及信号量和固定 worker 的选择边界。374 收藏 -
Go os.Root.FS 可以把受限目录适配为 fs.FS,让 fs.ReadDir、fs.ReadFile 等标准库读取接口复用目录边界。本文说明相对路径、Root 生命周期、越界访问和读写职责的取舍。374 收藏 -
Go runtime/metrics 通过 All 返回当前支持的指标描述。本文演示怎样按 Name、Description、Kind 和 Cumulative 筛选指标,并安全创建 Sample 读取,兼顾不同 Go 版本的支持集合差异。374 收藏 -
Go TLS 握手出现 ServerName 与证书 SAN 不匹配时,通常是客户端验证的主机名、SNI 发送的名称和证书中的 DNSNames 或 IPAddresses 没有对齐。本文按证据拆开三者关系,给出安全配置和排障边界。374 收藏