Go语言技术文章
-
用一个懒加载配置的实战场景,拆解 Go sync 标准库如何让并发调用共享一次初始化结果,重点说明错误也会被缓存、失败重试为何必须创建新实例,以及如何用测试验证并发语义。408 收藏 -
Go 的 atomic.Int64 不能在首次使用后复制。本文从 noCopy 约束、指针接收者和结构体字段设计出发,给出并发计数的安全写法与检查方法。258 收藏 -
bufio.Scanner 默认缓冲区遇到超长日志行会返回 ErrTooLong。本文用可复现的日志读取场景说明如何设置 Buffer、何时改用 bufio.Reader,以及怎样验证内存和错误边界。361 收藏 -
从一个需要同时排序整数、字符串和业务结构体的场景出发,拆解 Go 泛型约束、比较器和类型集合的组合方式,给出可编译的最小实现、边界判断与测试方法。459 收藏 -
Go 的 io.Reader 读取循环里,io.EOF 通常表示输入已经结束,但 n 仍可能大于 0。本文用一个可复现的读取器说明短读、空读和 EOF 的处理顺序,避免丢掉最后一段数据或写出忙等循环。137 收藏 -
Go 的 time.Duration 本质是 int64 纳秒数。本文用具体换算、溢出判断和定时器示例说明,为什么长时间配置会变成负数,以及如何在进入 time.NewTimer 或 time.After 前拦住错误值。348 收藏 -
目录扫描从 os.ReadDir 改成 os.File.ReadDir(n) 后,读取阶段可以按批次控制内存,但全局排序需求不会自动消失。本文用一个目录索引任务拆开读取、排序、错误收口和验收门禁,给出可复用的 Go 实现与取舍方法。378 收藏 -
time.Duration 本质是纳秒数,直接转成整数时会按目标单位截断小数。本文从接口参数和调用方预期出发,拆解单位常量、整数除法、浮点换算与超时配置的边界,给出可核对的写法。288 收藏 -
Go 的 flag.FlagSet 适合把一个命令拆成互不干扰的子命令。本文从 serve 和 inspect 两个入口出发,说明参数归属、错误输出、帮助信息和兼容演进应该怎样划边界。468 收藏 -
Go 的 json.Decoder.DisallowUnknownFields 能及时发现请求体中的未知字段,但直接全局开启也可能破坏旧客户端兼容。本文用可运行示例拆解严格解析、错误定位、兼容迁移和上线检查清单。201 收藏 -
用一个配置快照场景说明 Go slices.Clone 如何切断切片与底层数组的共享关系,比较直接赋值、append 和 Clone 的边界,并用竞态检测验证并发读取写入的安全做法。395 收藏 -
strings.FieldsFunc 适合按字符规则切分文本,但它会合并连续分隔符并丢弃空字段。本文用配置行解析场景说明它的边界,并给出保留空字段的自定义写法。184 收藏 -
Go 1.20 引入的 errors.Join 可以把多个失败原因合成一个可匹配的错误。本文用批量校验和并发收口示例,说明遍历顺序、errors.Is/errors.As 的匹配边界,以及如何输出不丢信息的日志。150 收藏 -
读取数十万文件的目录时,os.ReadDir 的排序语义和一次性返回 []os.DirEntry 会同时影响内存与响应时间。本文从目录扫描小工具出发,比较 ReadDir 与 File.ReadDir 的边界,并给出保留排序、改为分批遍历和验收内存的实现方法。458 收藏 -
Go 的 []byte 传递经常隐藏底层数组共享。本文用 bytes.Clone 拆开切片别名与大数组内存保留两个问题,给出判断时机、基准验证和边界取舍。138 收藏