Go语言技术文章
-
Go HTTP 服务收到 SIGTERM 后,用 NotifyContext 接管信号,再以带截止时间的 Server.Shutdown 停止监听并等待活动请求完成。222 收藏 -
unsafe.SliceData 对空切片的结果取决于 nil 和 cap:nil 返回 nil,cap 为 0 的非 nil 空切片返回不确定地址,不能直接解引用;cap 大于 0 时才有首个 backing array 元素可谈。222 收藏 -
围绕 Go crypto/x509 的证书链验证,区分叶子证书、中间证书和信任根,说明 SystemCertPool、NewCertPool、VerifyOptions 以及常见错误的排查顺序。222 收藏 -
围绕 Go filepath.Match 的方括号字符类,说明转义、字符区间、ErrBadPattern 以及 Unix 和 Windows 的差异,给出可直接改成测试的写法。222 收藏 -
Go sort.Search 并不要求把数据重新排成升序。本文从第一个 true 的返回语义出发,说明降序切片为什么使用 data[i] <= target,并处理精确命中、重复值、未找到和 len(data) 边界。222 收藏 -
从 defer 的执行时机、Close 返回值、重复关闭、错误变量遮蔽和循环作用域入手,排查 Go 文件清理错误并给出不覆盖主错误的修复写法。221 收藏 -
Go container/heap 的堆顶不对,通常不是 Push 自己排序失败,而是 Less 方向、Init 时机、接口内部 Pop 或修改元素后未调用 Fix。本文按不变量和 API 职责给出排查与修复方法。221 收藏 -
围绕 go.work 与 replace 规则,说明如何确认 workspace、写入本地替换、判断版本是否匹配,并用 go list 检查最终依赖目录。221 收藏 -
Go 导出 CSV 时,Writer.UseCRLF 决定记录行尾是否使用回车加换行。本文从表格软件兼容、字段引用、Flush 与字节检查几个环节说明如何稳定落地。221 收藏 -
gzip.Writer 会在首次 Write、Flush 或 Close 时把 Header 编码到底层输出;之后修改结构体只改变内存字段,无法回写已发出的字节。本文给出正确初始化、Reset 复用和防回归写法。221 收藏 -
Go 1.26 新增的 errors.AsType 用泛型返回具体错误类型,省掉 errors.As 中声明目标指针和传入地址的样板写法。本文说明包装错误、自定义 As、errors.Join 与旧版本兼容边界。221 收藏 -
把临时文件处理从 filepath.Join、os.CreateTemp 和 os.Rename 迁移到 os.Root,关键是先固定根目录,再让创建、写入、改名和清理都使用相对路径。本文用一个生成 JSON 报告的小项目拆解迁移步骤,并说明 Go 版本、资源关闭和越界路径的边界。221 收藏 -
Go 的 runtime.SetFinalizer 只在对象不可达后安排清理,函数里的最后一次使用不一定能把对象保活到系统调用结束。本文用非内存句柄场景拆解对象可达性、runtime.KeepAlive 的放置位置、finalizer 的边界与工程选型。221 收藏 -
用 go:generate 固定生成入口,在 go build 前检查生成结果与源定义是否同步,覆盖命令边界、差异检查、工具依赖和提交策略。220 收藏 -
演示如何用 Writer.RegisterCompressor 为指定 ZIP 方法注册压缩器,并说明 Method 选择、Close 刷新、并发安全、读取兼容性和性能衡量方法。220 收藏