Go语言技术文章
-
Golang · Go问答 | 1个月前 | golang · 数据库 · 工程实践 · database/sql · Go 数据库驱动 database/sql Rows.NextResultSet 多结果集
当一条数据库语句返回多个结果集时,Rows.Next 只会遍历当前结果集,必须配合 NextResultSet 切换到下一组数据。本文用可复现的 database/sql 代码说明遍历顺序、Err 检查和驱动兼容边界。439 收藏 -
io.NewSectionReader 适合从一个可随机读取的数据源中切出固定区间。本文用 bytes.Reader 演示 Offset、Read、ReadAt、Seek 与越界 EOF 的实际边界,避免把局部读取误写成全量读取。439 收藏 -
os.DirFS 把目录包装成 io/fs.FS,但它不等于 chroot;filepath.Join 只能拼接本地路径,fs.ValidPath 负责校验 FS 名称,符号链接仍可能把访问带出根目录。439 收藏 -
Go 普通 map 不支持并发读写,读、写、删除和遍历必须进入同一个同步边界;本文用并发计数器演示 RWMutex 的封装方式,并说明何时评估 sync.Map。439 收藏 -
解释 Go copy 复制切片时返回数量变少的原因,围绕目标切片长度、容量、make 初始化和 append 选择给出排查与修复方法。439 收藏 -
Go SetFinalizer 的触发时机由垃圾回收决定,不适合承担文件描述符、连接等非内存资源的确定性关闭。本文用 Close、defer、sync.Once 和 runtime.AddCleanup 组合出显式主路径加兜底清理的方案,并说明边界。439 收藏 -
Go 的 errors.Is 会沿错误包装树匹配哨兵值。本文用 %w 上下文包装、错误分类和 API 契约示例,说明为什么 ==、%v 拼接和重复 errors.New 会失效。439 收藏 -
Golang · Go教程 | 1个月前 | 容器 · go · 性能 · kubernetes · 运行时 · Kubernetes GOMAXPROCS cgroup Go 1.25 容器 CPU 限额
Go 1.25 开始,Linux 容器中的默认 GOMAXPROCS 会参考 cgroup CPU 限额,并在限额变化时自动更新。本文用最小示例说明旧代码的风险、GODEBUG 兼容开关、runtime.SetDefaultGOMAXPROCS 和上线前检查。438 收藏 -
用 Go debug/buildinfo.ReadFile 读取已构建二进制中的主模块、依赖版本与版本控制信息,配合发布校验避免拿错构建产物。438 收藏 -
Go SetDeadline 设置的是连接上的绝对读写期限,不是只作用于下一次调用。本文说明总耗时与空闲超时的区别、方向 API 的选择、超时判断和并发复查方法。438 收藏 -
Go 可以用文件名后缀和 //go:build 条件编译为 Windows、Linux 提供不同实现。本文用一个跨平台文件权限接口说明目录组织、构建标签、文件选择检查和常见坑。438 收藏 -
Go 的 select default 只说明本次 channel 未就绪,不等于任务失败。本文用 pending 状态、指数退避、随机抖动和 context 取消,说明非阻塞收发如何降频重试并避免丢任务。438 收藏 -
Go embedding 的字段冲突要先看选择器路径:同层同名会产生歧义,外层同名会隐藏嵌入字段,而方法提升还要单独检查签名与显式调用路径。本文用最小示例说明如何定位并修复。438 收藏 -
Go 子切片 append 后原切片内容被改写,通常是因为子切片仍有足够 cap,append 复用了同一个底层数组。本文用 len、cap、三索引切片和复制方案说明如何判断与隔离。438 收藏 -
说明 Go 服务启动时如何为 database/sql 的 PingContext 设置独立超时,区分超时、取消和驱动错误,并选择失败退出或降级策略。438 收藏