Go教程技术文章
-
Go regexp.Split 的 n 参数不是分隔符数量,而是返回子串数量上限。n<0 返回全部结果,n=0 返回 nil,n>0 最多返回 n 个子串并保留最后的未切分文本。451 收藏 -
Go 的 database/sql 提供了泛型 sql.Null[T] 来接收可能为 NULL 的列。本文从 Scan 指针、Valid 判断、零值区分和 driver.Value 类型边界四个方面说明可空字段的正确写法。451 收藏 -
用 go list -m -json 导出 Go 模块的路径、版本、目录、go.mod、替换关系和更新信息,说明连续 JSON 解析及主模块、构建列表、版本查询的边界。451 收藏 -
Go 的 maphash.Bytes 适合把字节序列映射为进程内的 uint64 分桶值,但它不是加密摘要,也不能替代原文相等判断。本文用短键索引场景说明 MakeSeed、相同 Seed、不同数据结构实例和碰撞复核之间的边界。450 收藏 -
Go 配置文件不要直接截断原文件,推荐先在同目录临时文件中写完并同步,再用 os.Rename 替换目标文件,同时处理关闭、清理、并发和跨平台边界。450 收藏 -
解释 Go color.NRGBA 的非预乘存储、RGBA() 的 16 位预乘返回值,以及 draw.Over 中 Alpha 如何参与混合,附固定输入的换算示例和常见边界。450 收藏 -
bytes.Reader.WriteTo 会消费当前未读区间,完整导出后 Len 变为 0。本文解释读取索引为什么推进,并给出复用 Reader、重读原始字节和随机读取时的安全写法。450 收藏 -
bbolt 的 DB.View 会提供一个一致的只读事务视图,Tx.WriteTo 可以把该视图写入 io.Writer,Tx.CopyFile 则适合直接生成备份文件。本文给出两种导出方式的 Go 写法,并说明权限、错误处理和事务生命周期。450 收藏 -
用 Go log/slog 设计结构化日志字段时,把服务固定字段、请求上下文和事件字段分层,再用 Handler 统一分组与敏感字段脱敏,日志更容易检索和维护。450 收藏 -
Go x/text/currency 的 ParseISO 用于解析三字母 ISO 4217 货币代码。本文说明如何处理格式或未知代码错误,并区分 Unit、Amount、Formatter 与 MustParseISO 的职责边界。450 收藏 -
通过 WithPanicHandler 为 Ants 任务配置统一异常处理,提供完整 Go 示例,说明堆栈记录、任务计数、回调完成通知,以及提交失败、业务失败和重试的区别。450 收藏 -
用 fs.FS 统一 Go 对磁盘目录和 embed.FS 的读取,讲清 fs.ReadFile、os.DirFS、fs.Sub、路径规则与错误边界。449 收藏 -
从虚拟根语义讲清 Go fs.Sub:如何隐藏底层目录前缀、正确校验 io/fs 路径,以及为什么 os.DirFS 加 fs.Sub 仍不能替代 os.Root 的符号链接越界防护。449 收藏 -
Golang · Go教程 | 3星期前 | JSON · 流式处理 · Go教程 · 内存优化 · 内存优化 encoding/json 流式解析 json.Decoder Go JSON处理 超大JSON数组
Go 解析超大 JSON 数组时,先 ReadAll 再 Unmarshal 会同时保留输入字节和全部对象。本文使用 json.Decoder、Token、More 与 Decode 逐项处理,并补齐输入上限、结束符检查和错误偏移记录。449 收藏 -
Go context.WithCancelCause 可以把业务取消原因传给下游。本文区分 ctx.Err() 与 context.Cause(ctx),示范哨兵错误、自定义错误类型、errors.Is 判断以及父子 Context 的首个取消原因规则。449 收藏