Go语言技术文章
-
Go unsafe.Slice 可以从 *byte 指针和长度构造共享底层内存的字节切片,但不会复制、扩容或管理内存。本文说明 nil 与零长度、真实对象边界、指针生命周期和读写权限的使用契约。225 收藏 -
Golang · Go问答 | 2星期前 | 连接池 · 故障排查 · database/sql · Go问答 · Go 数据库连接池 QueryContext rows.Close Rows.Err sql.Rows
Go 查询拿到 sql.Rows 后如果在扫描中途返回却没有 Close,底层连接可能长期处于 InUse,达到 MaxOpenConns 后新请求开始等待。本文给出统一关闭、检查 rows.Err 和用 DB.Stats 定位连接占用的方法。386 收藏 -
reflect.StructOf 遇到重复字段名会直接 panic。本文从字段去重、参数边界、局部 recover 和表驱动测试四个方面,给出可诊断的动态结构构造方式。243 收藏 -
Go 使用 bufio.Writer 写文件时,Write 成功不等于内容已经落盘。本文拆开 Flush、Sync、Close 的责任边界,并给出可返回错误的关闭流程与最终内容校验方法。103 收藏 -
讲清 Go reflect.Value.IsZero 在 nil 接口、typed nil 指针和接口容器之间的判断边界,给出先检查 IsValid 的安全写法与复查清单。413 收藏 -
Go Scanner 默认只能缓冲有限大小的 token,遇到超长日志会返回 token too long。本文说明如何在 Scan 前正确设置 Scanner.Buffer,以及何时改用 bufio.Reader 分片读取。212 收藏 -
Go 标准库 maps.Clone 可以复制 map 的顶层键值结构,并保留 nil 输入的语义。本文用最小示例说明普通复制、nil 与空 map、浅复制边界、自定义 map 类型和旧环境替代写法。423 收藏 -
Go os.OpenFile 的 perm 不是最终权限。本文用 umask、stat、UID/GID 和挂载状态拆解容器中权限看似失效的原因,并给出最小权限修复方法。366 收藏 -
Go 1.23 的 slices.Collect 可以把 iter.Seq 迭代器结果收集成新的切片。本文说明 slices.Values、自定义序列、nil 结果、深拷贝边界,以及已知长度时如何用预分配 append 控制容量。432 收藏 -
Go 文件在 Linux 能打开但 Windows 失败,通常是手写分隔符、盘符或相对路径基准不一致。本文用 filepath.Join、FromSlash、ToSlash 和 PathError 给出排查与修复方法。111 收藏 -
slices.Clip 会把 Go 切片的 cap 收紧到 len,避免后续 append 复用多余容量;但它不复制底层数组,真正要释放长期持有的大数组仍需建立独立副本。478 收藏 -
讲清 Go atomic.Value 零值 Load、首次 Store 类型确定、sync.Once 懒初始化和不可变配置快照之间的边界,避免 nil 与类型不一致 panic。314 收藏 -
用一个 Go 类型约束同时覆盖整数底层类型和自定义方法,讲清 ~T、定义类型、类型别名与方法集之间的关系。468 收藏 -
Go test -race 通过并不等于业务状态一定一致。本文从执行覆盖、同步关系和多字段不变量三层排查数据异常,并给出可复查的修复清单。479 收藏 -
Go 1.27 已支持具体类型的泛型方法,但旧工具链、低版本 go.mod 和接口方法仍有边界。本文用 Box、Pair 示例说明排错与兼容写法。163 收藏