Go语言技术文章
-
用 os.Root 把文件操作限制在指定目录内,再通过 Root.Link 的两个相对路径参数创建同一文件的硬链接,并梳理符号链接源文件、路径越界和 GOOS=js 的边界。229 收藏 -
Go HTTP 请求已经取消,但 Handler 仍不退出时,先确认 Context 信号,再按下游调用、channel、锁和响应写入逐层定位真正的阻塞点。229 收藏 -
Go Flock 的 Locked() 只反映当前 Flock 实例,不能代表其他进程是否持有同一路径的文件锁。本文用实例边界、TryLock 竞争、Unlock 生命周期和 Stat 元数据说明正确判断方式。229 收藏 -
说明 go-smtp Data 写入器关闭的提交语义,区分内容传输、服务器接受和最终投递,提供正常关闭与异常弃用连接的 Go 示例。229 收藏 -
Go compress/flate.Writer 没有可直接填写的公开字段,可选行为要通过 NewWriter、NewWriterDict 的参数以及 Write、Flush、Close、Reset 的生命周期来表达。本文区分压缩级别、预置字典、流式刷新和 Writer 复用的职责,并给出错误处理与配置封装示例。229 收藏 -
Go 用 crypto/sha512 计算文件 SHA-512 时,正确做法是让文件流写入 sha512.New 返回的哈希对象,再读取 Sum(nil)。本文解释空摘要、摘要长度不对、读取错误和重复复用对象导致结果异常的原因。229 收藏 -
go/types.NewSignatureType 用 variadic 标记源码中的 ... 语法,但参数元组仍保存完整的切片类型。因此 func(string, ...any) 的最后参数是未命名 []any,而不是 any。本文说明这种表示的原因、常见构造错误、类型参数边界和 append 的特殊规则。229 收藏 -
Go 的 go/doc/comment.Parser 负责把文档注释解析成 Doc,但包名与当前包符号是否能成为 DocLink,需要 LookupPackage 和 LookupSym 提供上下文。本文用一个自包含示例说明两个回调的参数、返回值、默认行为和常见边界。229 收藏 -
Go 在 ARM、386 和 32 位 MIPS 上对 64 位原子操作有额外的对齐要求。本文从结构体字段布局入手,说明如何识别中间字段错位、改用类型化原子类型,以及必须使用旧式函数时怎样重排字段。228 收藏 -
Go io.Pipe 是没有内部缓冲的同步内存管道:PipeWriter.Write 会等到 PipeReader 消费数据后才完成。本文从生产者消费者串流出发,说明正常关闭、CloseWithError、读端取消与背压边界。228 收藏 -
Go 依赖下载失败要区分模块代理与校验服务。本文解释 GOPROXY 回退、GOSUMDB 与 go.sum 的职责,并给出固定单模块项目准备 vendor、工具链及离线构建的方案。228 收藏 -
Go big.Int.SetString 解析大整数时需明确进制并检查成功标志。本文说明十进制与自动进制的差异、失败时接收者状态,以及临时对象提交和独立副本的用法。228 收藏 -
Go 的 HTTP 请求体是一次性读取流,前置中间件、表单解析或 JSON 解码器读到 EOF 后,后面的 io.ReadAll 就可能得到空结果。本文说明如何定位消费点、缓存原始字节、重置 Request.Body,并处理空请求体、大小限制和提前关闭等边界。228 收藏 -
用 sync.Cond 把空队列等待、生产者入队和消费者唤醒连起来,重点说明 Wait 必须放在条件循环中,以及 Signal、Broadcast 和退出处理的边界。228 收藏 -
Go bufio.Reader.ReadString 可能同时返回已读文本和 io.EOF。本文用一个按行读取的小工具说明分隔符、尾部数据与错误状态的关系,并给出先处理数据再判断错误的可靠循环。228 收藏