Go教程技术文章
-
用 bytes.Reader 从指定偏移量读取时,Seek 会移动当前位置,ReadAt 不会移动游标,切片则改变可见数据范围。本文用示例说明三种写法与越界处理。473 收藏 -
Go gzip.Writer.Flush 会让流式数据更早可见,但高频调用会同步写出、增加同步标记并切碎压缩批次。本文给出消息边界、HTTP 缓冲和压测判断方法。472 收藏 -
Go 使用 net/textproto.ReadMIMEHeader 报非法字段时,按缺少冒号、字段名 token、字段值字节和首行缩进四个边界定位,并用原始转义与十六进制日志修复上游输入。471 收藏 -
bufio.Reader.ReadString 读不到分隔符时,可能返回已经读到的字符串和 io.EOF。本文用返回值边界、最后一段处理和读取循环说明如何避免丢数据、误报错误与死循环。470 收藏 -
用一个 Go 类型约束同时覆盖整数底层类型和自定义方法,讲清 ~T、定义类型、类型别名与方法集之间的关系。468 收藏 -
Go regexp.Expand 依赖 FindSubmatchIndex 返回的字节偏移,把命名组或数字组展开到可复用的 []byte 缓冲区。本文用完整示例说明四个输入、模板边界、未匹配组和循环拼接方式。468 收藏 -
Golang · Go教程 | 2天前 | Go教程 · encoding/json · Go encoding/json json.RawMessage json.Decoder 未知字段 兼容升级
围绕 Go json.Decoder 的结构体解码边界,说明如何用默认宽松解码兼容新增字段,再用 json.RawMessage 保留未知字段,并按场景切换严格校验。468 收藏 -
Golang · Go教程 | 3天前 | 性能优化 · 垃圾回收 · Go教程 · go bytes.Buffer Go sync.Pool Go 对象池 sync.Pool 缓存 Go 临时对象复用
sync.Pool 适合复用短生命周期对象,却不保证对象一直存在或每次 Get 都命中。本文说明 Get、New、Put 和自动移除的边界,并给出稳定缓存的替代选择。467 收藏 -
用 Go log/slog 的 LogValuer 把敏感类型转换成只含安全字段的 slog.Value,掌握脱敏、Resolve 和多 Handler 输出的边界。466 收藏 -
Go bytes.Reader 同时支持顺序读取、绝对偏移读取和定位。本文区分 Len、Size、ReadAt、Seek 的职责,并用 io.SectionReader 固定下游可见的缓冲区间。465 收藏 -
Go 的 utf8.DecodeLastRuneInString 处理空字符串时返回 RuneError 和 size=0。本文用返回值对照、UTF-8 多字节裁剪示例,区分空输入、合法 U+FFFD 与非法尾字节。463 收藏 -
通过包装 tls.ClientSessionCache 记录 Get、Put 与命中,再用 ConnectionState.DidResume 区分缓存命中、TCP 连接复用和真正的 TLS 会话恢复。463 收藏 -
filepath.WalkDir 的错误不只来自文件本身。本文按根路径、目录读取和子项回调三类入口,讲清 d 为 nil、SkipDir 与 SkipAll 的处理边界。460 收藏 -
Golang · Go教程 | 2天前 | 事务 · go · database/sql · Go database/sql readonly TxOptions driver.ConnBeginTx
Go 的 sql.TxOptions.ReadOnly 通过 DB.BeginTx 传给 driver.ConnBeginTx,是否真正形成只读事务取决于驱动实现。本文拆解传递路径、错误边界和连接池收尾方式。458 收藏 -
Go 的 database/sql.QueryRowContext 不直接返回查询错误,真正的结果要从 Row.Scan 获取。本文用 sql.ErrNoRows 和 errors.Is 区分未找到、数据库失败与成功,并整理封装和边界处理。457 收藏