Go语言技术文章
-
Go 用 bufio.Writer.ReadFrom 复制大文件时,Reader 的短读通常不是错误,底层 Writer 的短写则必须通过 ReadFrom 和最后一次 Flush 的错误共同判断。本文按调用路径说明快速路径、缓冲区、io.ErrShortWrite 与 io.ErrNoProgress 的处理方式。110 收藏 -
Go zlib 解压出现校验和错误时,需要区分尾部不匹配、输入截断和关闭错误。本文用受控小样本演示完整读取、保留错误链与失败正文隔离,并说明压缩器关闭和底层资源的处理责任。110 收藏 -
Go FlagSet 可以为每个子命令建立独立参数集合。本文用标准库示例说明如何切分 os.Args、分别调用 Parse、处理错误与位置参数,并总结公共参数的组织边界。110 收藏 -
Go TLS 排障中,PeerCertificates 表示对端发送的证书列表,VerifiedChains 表示本地构造出的验证链。本文说明如何结合握手状态、客户端与服务端角色判断证书链,避免只凭证书数量下结论。110 收藏 -
用 Go crypto/rand.Read 为令牌填充固定长度的安全随机字节,解释 32 字节预算、十六进制与 Base64 编码长度、错误边界和上线前应观察的生成指标。110 收藏 -
zip.Writer.Close 不只是关闭一个对象,它还要结束当前条目、补写中央目录和结束记录,并刷新内部缓冲,因此部分写入错误会在最后才返回。本文拆开这些职责,说明为什么必须同时检查 Create、Write 和 Close。110 收藏 -
Go x/text/encoding/unicode 的 UseBOM 会在 UTF-16 输入带起始 BOM 时覆盖默认字节序,无 BOM 时再回退到默认值。本文用示例区分 UseBOM、ExpectBOM 和 IgnoreBOM。110 收藏 -
Go cmp.Or 可以按参数顺序返回第一个非零值,适合组织请求配置、环境变量和代码默认值的回退链,也能串起多字段排序比较。本文说明零值、comparable 约束与参数求值边界。110 收藏 -
go.starlark.net/starlark 的 Thread 局部数据属于 Go 侧线程状态,脚本全局变量属于 Starlark 模块环境。本文用一个宿主回调示例拆开两者的可见范围、初始化时机和并发隔离边界。110 收藏 -
go-mp3 的 Seek 使用解码流字节偏移,输出为 16 位小端双声道 PCM;本文说明为什么要按 4 字节 sample 对齐,并给出 Seek、Read 和生产边界处理示例。110 收藏 -
Go sync.Pool 里的对象会消失,是因为它只承诺临时对象复用,不承诺持久保存:池中元素可被运行时自动移除,Get 也可能直接把池当作空池。本文用 New、Get、Put 示例说明正确用法,并划清 sync.Pool 与业务缓存的边界。109 收藏 -
用 go/format.Source 格式化模板生成的 Go 源代码,处理完整文件与代码片段的差异,再在成功后写入文件,并说明固定 gofmt 版本的稳定性边界。109 收藏 -
slices.Insert 批量插入是否复用底层数组,先看插入后的长度是否超过原切片容量,再结合尾部或中间插入位置判断移动成本。本文给出容量判断、别名边界与可复查验证代码。109 收藏 -
time.AfterFunc 会在独立 goroutine 中执行回调。本文用事件 channel、stop 信号和 callbackDone 完成信号,说明如何让主 goroutine 安全接收超时事件,并处理 Stop、Reset 与回调并发边界。109 收藏 -
Go 的 utf8.DecodeRuneInString 遇到非法 UTF-8 时返回 RuneError 和 size=1,空字符串则返回 size=0。本文用原创示例说明如何按字节推进、区分合法替换字符,并处理分块读取的字符边界。109 收藏