Go教程技术文章
-
Go netip.Prefix 表示一个 CIDR 网段,但 Addr 可能仍保留主机位。本文用 Masked 得到规范化起始地址,再按 IPv4 与 IPv6 的位数计算最后地址,说明无效前缀、单地址前缀和地址族边界。204 收藏 -
将 Expr 编译移出重复求值路径,保存并复用 vm.Program;通过完整 Go 示例说明 Env、AsBool、独立输入,以及规则更新和缓存失效的处理边界。204 收藏 -
Golang · Go教程 | 1星期前 | 标准库 · JSON · Go教程 · encoding/json · Go encoding/json Prefix JSON格式化 indent json.MarshalIndent
Go json.MarshalIndent 会先把 Go 值编码为 JSON,再用 prefix 和 indent 排版嵌套结构。本文区分两个参数的职责,说明接口、配置和日志场景的选型,并补充错误处理、json.Indent 与 HTML 转义的边界。204 收藏 -
Go 错误经过多层 %w 包装后,不能再依赖 == 或完整错误文本判断原因。本文用 errors.Is 处理多层 Unwrap,区分 errors.Unwrap 的单层职责,并说明错误分类与上下文包装的边界。204 收藏 -
Go database/sql/driver.Stmt.NumInput 决定 database/sql 是否能在执行前检查占位参数数量。本文用驱动实现视角说明返回非负数与 -1 的差异,帮助定位参数个数错误到底发生在预检阶段还是数据库执行阶段。204 收藏 -
围绕协议兼容、CRC32C 与流式更新,说明 Go hash/crc32 中 IEEE、Castagnoli、Koopman 和自定义校验表的选择方法。204 收藏 -
os.DirFS 可以把固定目录暴露为 io/fs,但它不是 chroot 安全边界。本文从最小读取写法、fs.ValidPath 输入约束和符号链接风险讲起,并给出 Go 1.24+ 使用 os.OpenRoot 的安全替代方案。204 收藏 -
Go 1.22 起可以用 reflect.TypeFor[T]() 直接取得泛型类型的 reflect.Type。本文用可复用示例说明结构体、切片和接口类型的获取方式,并区分 TypeFor 与 TypeOf 的边界。204 收藏 -
types.MethodSet.Lookup 按包身份和方法名查找方法,未导出方法的包路径会参与唯一标识。本文用类型检查结果构造方法集合,演示怎样命中 refresh、读取 Selection.Obj,并解释包不匹配时为什么返回 nil。204 收藏 -
Go 的 utf8.RuneError 不能单独代表非法输入:DecodeRune 对空输入返回 RuneError、size=0,对非法非空字节返回 RuneError、size=1;合法的 U+FFFD 则有正常字节宽度。本文用单点解码和整段校验两条路径说明如何准确判断。204 收藏 -
Go 里不要只按“随机数”三个字选包:模拟、洗牌和可复现实验用 math/rand/v2,令牌、密钥和验证码用 crypto/rand。本文把并发安全、独立源与测试注入边界放在同一张决策表里。203 收藏 -
用 Go 1.23 的 iter.Seq 把 cursor 分页查询包装成惰性遍历,说明 yield 返回值、提前停止、重复游标和错误边界;需要保留页码时再用 iter.Seq2 传递附加信息。203 收藏 -
os.File.Sync 适合放在关键文件写入、检查点和原子替换的持久化边界上。本文区分 Write、Sync、Close 与目录项同步,给出错误处理和同步频率的实用判断。203 收藏 -
Go encoding/csv 默认会检查每条记录的列数。不齐列数据要保留时,可将 FieldsPerRecord 设为 -1,再在 Read 循环中按表头长度标记、补齐并审计异常记录。203 收藏 -
Go 的 encoding/csv 可以把引号字段里的换行当作字段内容,而不是新记录。本文用 Reader.Read、FieldsPerRecord 和 ParseError 处理多行字段,并区分 EOF、字段数不一致与引号语法错误。203 收藏