Go教程技术文章
-
Golang · Go教程 | 1星期前 | 标准库 · golang · 性能优化 · bytes.Buffer · 切片边界 · Go bytes.Buffer 切片容量 AvailableBuffer 零分配
bytes.Buffer.AvailableBuffer 可以把格式化结果直接追加到缓冲区的可用容量中,但返回切片只适合紧接着传给同一个 Buffer 的 Write。本文用循环拼接日志的例子说明 Len、Cap、Available 与下一次写入之间的边界,以及什么时候不该保存这段切片。292 收藏 -
Go 泛型代码需要把类型交给反射注册表时,reflect.TypeFor 可以直接取得类型描述;再配合 AssignableTo 校验注册边界,避免用空值和类型断言绕一圈。291 收藏 -
从 io.Copy 的接口选择入手,拆解 os.File.ReadFrom 如何走 ReaderFrom 快路径,以及短读、EOF 和部分写入时该怎样验证。289 收藏 -
用 log/slog 的 slog.Group 组织请求与数据库字段,配合 TextHandlerOptions 核对嵌套键的最终输出,避开参数错位和重复前缀。289 收藏 -
从 context.WithTimeout、Done 和 Err 的真实控制流出发,说明为什么设置超时不等于 goroutine 自动停止,并给出可验证的退出写法。287 收藏 -
Go 1.27 为 go doc 增加 -ex,并支持 package@version 查询。本文用 bytes.ExampleBuffer 演示如何找到可执行示例,说明模块版本边界、输出范围和旧工具链的兼容检查。286 收藏 -
slices.DeleteFunc 适合按条件批量删除切片元素,但回调遍历的是原切片语义,不能在回调里再改同一个切片。本文用可运行示例拆开保序删除、索引变化和尾部清零带来的内存边界,并给出何时改用一次性筛选。285 收藏 -
用 context.WithCancelCause 把请求取消的真实原因带过边界,并通过 errors.Is、context.Cause 和并发测试确认错误链没有丢失。284 收藏 -
Golang · Go教程 | 1星期前 | 网络编程 · IPv6 · Go教程 · 代码质量 · go vet · IPv6 net.Dial Go 1.25 go vet hostport net.JoinHostPort
Go 1.25 的 go vet 新增 hostport 分析器,可以发现用 fmt.Sprintf 拼接 host 和 port 后传给 net.Dial 的 IPv6 地址错误。本文从错误现场出发,改用 net.JoinHostPort,并用 vet 与运行测试核对修复结果。284 收藏 -
用 Go io/fs.Sub 把一个目录裁成受限文件树,配合 fs.ValidPath 和 fs.Open 处理路径边界、目录遍历与失败回退。284 收藏 -
Go 反射处理结构体元数据时,可以用 reflect.Type.Fields 按声明顺序遍历 StructField,再通过 Tag.Lookup 读取标签;需要同时拿到字段值时使用 reflect.Value.Fields。本文从字段扫描、标签校验到嵌套结构体边界给出可运行示例。283 收藏 -
用 reflect.Value.Seq2 把 map、slice 和自定义迭代器统一接入泛型消费逻辑,说明 CanSeq2 的预检边界、Value 解包方式以及容易触发 panic 的场景。282 收藏 -
Go 服务排查请求体时,io.TeeReader 可以把已经读取的数据同步写入审计缓冲区,同时把原始 Reader 的数据继续交给解析器。本文用真实读取链说明它的无缓冲边界、写入错误传播和敏感数据限制。282 收藏 -
Golang · Go教程 | 6天前 | 标准库 · 类型安全 · Go教程 · database/sql · 数据库驱动 · 类型转换 数据库驱动 Go 1.27 database/sql.ConvertAssign Rows.Scan
Go 1.27 新增 database/sql.ConvertAssign,把 Rows.Scan 使用的常见值转换逻辑提供给数据库驱动。本文用一个驱动扫描场景拆开源值、目标指针、类型错误和 NULL 边界,说明如何复用转换规则而不把驱动实现写成一套私有规则。281 收藏 -
io.MultiWriter 会按传入顺序逐个写入,某个 Writer 返回错误或短写入后立即停止,不会继续后面的目标。本文用日志分流场景拆解部分写入、ErrShortWrite、重试与一致性边界。279 收藏