Go语言技术文章
-
bufio.Reader.WriteTo 返回的是已复制字节数 n 和复制错误 err。目标 Writer 可能在部分写入后失败,调用方应同时保存 n 与 err,并区分完整复制、目标写入失败和源读取失败。495 收藏 -
Go 服务出现内存指标突增时,不能只看 Sys 或单次 HeapAlloc。本文用 runtime.MemStats 建立采样快照,结合堆保留、对象数量、GC 次数和分配速率区分短时峰值、缓存保留与持续增长。495 收藏 -
Go 事务业务代码返回 nil 并不代表提交成功。本文用可复用的 WithinTx 函数分别处理 BeginTx、业务执行、Rollback 与 Commit 错误,并说明上下文取消、panic 和 sql.ErrTxDone 的边界。495 收藏 -
Go bufio.Scanner 报 too many empty tokens,通常不是缓冲区太小,而是自定义 SplitFunc 在 EOF 下反复返回未推进的非 nil token。本文用返回值关系说明根因、修复方式和 Reader 的适用边界。495 收藏 -
Go unsafe.Slice 的长度参数是元素数,不是 C 缓冲区字节数。本文用 cgo 示例说明如何校验指针、换算长度、维持 C 内存生命周期,并避开布局和 Go 指针陷阱。495 收藏 -
errors.Join 返回的是可遍历的错误树,业务判断应直接使用 errors.Is;需要展示全部原因时再读取 Unwrap() []error,不能依赖字符串拆分或 errors.Unwrap。495 收藏 -
讲清 Go json.Decoder 读取连续 JSON 值时如何区分正常 EOF、记录中途截断、语法错误和类型错误,并用 InputOffset 记录可恢复的失败位置。495 收藏 -
Golang · Go教程 | 2个月前 | 标准库 · 泛型 · 资源管理 · 迭代器 · Go教程 · 资源释放 iter.Seq range over function Go泛型迭代器 iter.Pull
Go 1.23 引入的 iter.Seq 让自定义序列可以直接配合 for range,但提前 break 与 iter.Pull 的 stop 处理决定了资源能否及时释放。本文用分页读取与筛选场景拆解 push 迭代器、pull 迭代器和停止边界。495 收藏 -
Go go-echarts/v2 不需要把多个图表硬塞进一个实例。本文用 components.NewPage 创建页面容器,通过 AddCharts 追加独立图表,再设置布局、页面标题和统一输出,最后给出 v1 到 v2 的迁移检查清单。494 收藏 -
robfig/cron/v3 默认采用分钟开头的五段规则。本文说明 WithSeconds 六段秒制、SecondOptional 兼容模式及 ParseStandard 的区别,并给出处理注册错误和停止调度的完整示例。494 收藏 -
Go 中 errors.Is 返回 false,通常不是判断函数失效,而是错误链没有通过 %w 保留下来,或比较目标每次都由 errors.New 新建。本文用最小示例拆开包装、哨兵错误、自定义 Is 和 errors.Join 的边界,给出可复查的修复清单。494 收藏 -
Go 解析 key=value 配置时,strings.Cut 会在第一次分隔符处分开字符串,并通过 found 区分未找到分隔符的情况。本文从具体输入出发,处理空值、多处分隔符和错误边界。494 收藏 -
使用 os.Root 后仍遇到路径校验失败,通常是把根目录再次拼入参数,或混淆了 io/fs 路径与本地路径。本文结合 IsLocal、Localize 和 Root.Open 梳理可直接落地的相对路径规则与排错方法。494 收藏 -
Go 的 string 按字节存储,直接切片可能把多字节 UTF-8 字符截在中间,产生非法编码。本文用可复现代码说明原因,并给出按 rune 截取与按合法字节边界截取的选择方法。494 收藏 -
Go ServeMux 将尾斜杠模式视为子树,访问子树根的无尾斜杠路径时会默认重定向。本文用 httptest 验证状态码与 Location,并说明如何注册精确路径覆盖默认规则。494 收藏