Go语言技术文章
-
slog.LogValuer 可以把复杂对象转换成结构化日志值,但如果直接把令牌、邮箱或请求头塞进 Attr,日志脱敏就会失效。本文从 LogValue 的降级边界出发,演示组字段、零值和审计检查如何组合,避免调试信息变成敏感数据出口。403 收藏 -
io.Pipe 没有内部缓冲,它用同步的 PipeReader 和 PipeWriter 把生产者与消费者接起来。本文用一个流式导出示例说明 Write 为什么会阻塞、CloseWithError 如何传递失败,以及怎样避免 goroutine 泄漏。403 收藏 -
Go 的 time.LoadLocation 在精简容器中报 unknown time zone,通常是运行环境缺少 IANA 时区数据。本文按查找顺序、镜像补齐、time/tzdata 嵌入和 ParseInLocation 验证给出处理方案。403 收藏 -
用 io/fs.FS 统一 Go 的 embed.FS 与 os.DirFS,解释 fs.ValidPath 的路径规则、发布目录边界和开发环境切换方式。403 收藏 -
Go 反射中,Value.Elem 遇到 nil 指针会返回 zero Value。先用 IsValid 判断,再对可空 Kind 调用 IsNil,并在每次 Elem 后保留成功标志,就能避免继续访问无效 Value。403 收藏 -
Go bytes.Reader.ReadAt 用显式偏移读取数据而不改变当前位置,适合读取文件头、索引和多个独立区间。本文说明它与 Read、Seek 的边界、n 与 io.EOF 的判断方式,以及只读并发使用时的注意事项。403 收藏 -
用 runtime/cgo.Handle 把包含 Go 指针的状态安全交给 C 保存和回调,说明 NewHandle、Value、Delete 的生命周期、并发边界与常见失效原因。403 收藏 -
pkg.go.dev API 使用 nextPageToken 续取分页结果。本文用 Go 演示如何保留原始查询参数、追加 token、处理空页与重复游标,并给出可恢复的请求循环。403 收藏 -
在 Go 应用中,可通过 go 关键字将后台任务(如 Redis 监听、定时检查)作为独立 goroutine 启动,与 http.ListenAndServe 并发执行;但必须避免空循环、合理管理生命周期,并优先使用 channel 或 select{} 等协作式等待机制。 在 Go 应用里,像402 收藏 -
Go 的 regexp.Expand 和 ExpandString 可以把正则捕获结果写入模板。本文从命名捕获组、模板边界和字节切片复用出发,给出可验收的替换写法,并说明空捕获组与并发使用时的注意点。402 收藏 -
Go 1.26 迁移 B.Loop 基准时,重点不是把 b.N 换成一个新方法名,而是确认计时边界、函数调用保活、内联变化和死代码消除没有改变被测对象。402 收藏 -
Go 统计整数二进制中 1 的数量,直接使用 math/bits 的 OnesCount 系列即可。本文按 uint、uint32、uint64 的宽度说明函数选择,演示切片汇总,并解释有符号整数转换时的补码边界。402 收藏 -
Go 的 os.ReadDir 函数会按文件名排序,而 (*os.File).ReadDir 返回目录顺序。本文用最小示例说明两者差异,并给出目录批处理和测试中保持结果稳定的写法。402 收藏 -
Go 向已关闭 channel 发送会触发 panic。本文从发送生命周期出发,说明关闭责任如何划分,并给出多发送方等待后统一 close 的迁移写法与排查清单。402 收藏 -
用同一段 Go 示例验证 fmt.Appendf 的追加语义、容量增长与格式占位符边界,给需要构造日志或协议字节流的代码一个可复用的写法。401 收藏