Go语言技术文章
-
讲清 sha256.New、io.Copy、hash.Hash.Sum 与 Reset 的组合,处理流式摘要、读取错误和状态复用边界。172 收藏 -
Go 的 os/user.Current 用于获取当前进程用户,首次调用后会缓存结果;os/user.Lookup 用于按用户名查询,并在找不到用户时返回 UnknownUserError。本文结合 cgo、osusergo 和跨平台字段差异说明怎样选择。171 收藏 -
Rows.ColumnTypes 可以在不写死字段结构的情况下读取查询结果的列名、数据库类型、扫描类型以及驱动支持的长度、可空性和小数精度。本文给出动态扫描写法,并说明 ok 标志、驱动差异和资源生命周期。171 收藏 -
Go 泛型调用无法推导类型参数时,先判断缺少的是实参类型信息、函数值上下文还是约束匹配,再补完整类型参数或最短前缀。本文用无参数函数、部分推导、回调和 comparable 约束说明修复边界。171 收藏 -
Go 解析 CSV 时,record 下标只能说明字段在当前切片中的位置,不能直接定位原始文件。本文演示如何在 Read 成功后使用 encoding/csv.Reader.FieldPos 获得字段起始行号和字节列号,并结合 ParseError、InputOffset 和下标边界生成可排查的错误信息。171 收藏 -
Go 泛型约束可以同时写底层类型集合和接口方法。本文用一个可复用的约束示例说明类型集合、方法集、值接收者与指针接收者之间的边界。171 收藏 -
脚本读取 go.mod 时,不要先写正则拆文本。本文用 go mod edit -json 拿到结构化内容,说明字段范围、单文件边界、脚本消费方式和 Go 工具的错误处理。171 收藏 -
解释 Go bufio.Writer.AvailableBuffer 返回切片的有效期,说明 append 后立即 Write 的正确用法、下一次写操作的失效边界,以及容量不足和 Flush 错误的处理方式。171 收藏 -
Go encoding/binary.Uvarint 返回 n=0 通常表示当前字节切片还不完整,不是已经确认格式错误。本文解释 n 的正负含义、补读缓冲区的方法,以及 Uvarint 与 ReadUvarint 的选择边界。171 收藏 -
Go io.LimitReader 适合限制可选字段本次最多读取的字节数,但它不会自动判断字段是否完整。本文用存在标记和长度前缀示例,说明如何配合 io.ReadFull 处理字段不存在、长度超限和 io.ErrUnexpectedEOF。171 收藏 -
通过Go标准库构建tarpack小项目,逐条流式归档普通文件,复用复制缓冲,说明条目大小、关闭错误、并发与内存边界。171 收藏 -
通过 Visitor 返回值掌握 Go ast.Walk 的深度优先遍历、子树裁剪与 Visit(nil) 退出通知,完成一个跳过函数体的源码分析示例。171 收藏 -
Go Timer Reset 的安全写法取决于 Go 版本和计时器状态。本文围绕 Stop、Drain 与 Reset 的先后关系,说明 Go 1.22 及更早版本的兼容处理、Go 1.23 之后的语义变化,以及通道型 Timer 与 AfterFunc 的不同边界。170 收藏 -
Golang · Go问答 | 2星期前 | JSON · 错误处理 · go · 兼容性 · Go UTF-8 encoding/json/v2 encoding/json/jsontext JSON解码
encoding/json/v2 默认拒绝 JSON 字符串中的无效 UTF-8,因此旧数据在迁移或接入边界处可能出现解码失败。本文用真实无效字节说明严格模式、AllowInvalidUTF8(true) 和 U+FFFD 替换之间的关系,并给出兼容与拒绝的选择边界。170 收藏 -
Go 1.22 以后,ServeMux 的单段路径变量和末尾多段通配符并非一重叠就冲突。本文用请求集合解释真正的交叉模式,说明如何通过字面路径段拆开路由边界,并提醒 PathValue、尾部斜杠和旧版本兼容开关的使用边界。170 收藏