Go教程技术文章
-
Golang · Go教程 | 1星期前 | Go教程 · Go slog JSONHandler时间格式 HandlerOptions ReplaceAttr slog.TimeKey Go结构化日志时区 time.Time Format
Go log/slog 的 JSONHandler 没有直接的时间布局参数,本文用 HandlerOptions.ReplaceAttr 重建 time 属性,讲清 Go 时间布局、UTC、分组字段和零时间的处理边界。158 收藏 -
Go 读取 CSV 时,字段中的逗号和换行必须放在双引号内,并交给 encoding/csv.Reader 解析。本文说明如何保留完整字段、区分列数错误与 ParseError,以及何时不该使用 LazyQuotes。157 收藏 -
Go os/signal 的 channel 容量不是信号种类数量。本文从 Notify 的非阻塞发送、接收速度和退出生命周期出发,说明容量 1 何时足够,以及何时需要更大的缓冲。157 收藏 -
用 K comparable 和数值联合约束抽象 Go 求和逻辑,保留整数、浮点数及自定义数值类型的返回类型,并说明 ~、类型推断与边界。157 收藏 -
Go 1.24 引入 testing.B.Loop 后,基准函数不必再手动围绕 b.N 组织循环。本文用一个可运行的小实验说明循环边界、计时窗口、结果保活和旧写法迁移,并给出核对 ns/op 与自定义指标的检查方法。156 收藏 -
用一个可复现的 Go 示例拆清 sync.Pool 的复用边界、GC 后对象消失的原因,以及它和真正缓存之间的区别,最后给出可验证的使用清单。156 收藏 -
Go 的 time.Parse 没有时区时按 UTC 解释文本,time.ParseInLocation 则按传入 Location 解释。本文用同一日期、IANA 时区和比较方法说明两者差异及常见坑。156 收藏 -
reflect.Value.IsZero 判断的是值所属类型的 Go 零值,不等同于字段为空、结构体没有可见内容或切片长度为零。本文用结构体、空集合和无效 Value 的对比示例说明边界,并给出更合适的判断选择。156 收藏 -
围绕 Go os/exec 的 Cmd.Env 和 Cmd.Environ,说明如何用允许名单构造最小环境,并处理 PATH、Dir、重复键与跨平台边界。156 收藏 -
Go 1.27 为 go/scanner.Scanner 增加 End 方法。本文用 token.Pos、token.File.Offset 和半开区间说明它如何给源码分析工具提供可靠的 token 结束位置,避免继续手算偏移。155 收藏 -
Go encoding/csv 开启 ReuseRecord 后,Read 返回的记录切片可能与下一次读取共享底层数组。本文用 goroutine 场景说明何时复制 []string,以及如何避免异步任务读到被覆盖的数据。155 收藏 -
Go 1.24 的 strings.SplitSeq 返回单次消费的字符串迭代器,适合只遍历不保存结果的场景。本文对比 strings.Split 与 SplitSeq 的消费方式,核对连续分隔符、空字符串和提前 break 等边界。154 收藏 -
Go 中 os.Rename 在同一文件系统里适合做临时文件提交,但跨文件系统时可能返回 invalid cross-device link。本文从错误现场出发,写出可检查、可回退、不会把半成品当正式文件的保存流程。154 收藏 -
使用一个 Go log.Logger 统一格式,再通过 io.MultiWriter 同时写入标准输出和文件;本文还说明写入错误短路、并发安全与 Close 生命周期边界。154 收藏 -
讲清 bytes.Buffer 处理分段响应时 Len、Cap、Grow、Reset 和 Bytes 的边界,给出复用同一缓冲区、复制别名数据和隔离并发请求的实战写法。154 收藏