Go语言技术文章
-
用 reflect.StructOf 动态生成带 Tag 的结构体时,重点检查字段是否导出、Tag 是否按约定格式读取,以及嵌入字段不支持提升方法这三个边界。333 收藏 -
Golang · Go问答 | 2星期前 | 容器 · 性能排查 · Go问答 · 运行时 · go GOMAXPROCS 容器 CPU 配额 runtime.NumCPU cgroup cpu.max Kubernetes CPU limit
Go 容器里的 GOMAXPROCS 不一定等于宿主机 CPU 数。本文从 CPU limit、CPU request 和运行时实际值入手,给出 Go 进程内与 cgroup 两侧的观察方法,并说明 Go 1.25+ 的自动默认、手动覆盖和复查边界。360 收藏 -
Go 的接口类型可以参与比较,但接口里装入 slice、map 或 func 等不可比较动态值时,直接比较可能触发 panic。本文用 reflect.Type.Comparable 判断动态类型的类型级条件,再处理 nil、动态类型不同和 NaN 等边界,最后比较反射、泛型约束与业务键设计的适用场景。134 收藏 -
Go fuzzing 找到失败输入后,怎样从日志、testdata/fuzz 目录和 -run 路径中定位首次失败案例,并把它变成稳定回归测试。282 收藏 -
reflect.Value.IsZero 判断的是值所属类型的 Go 零值,不等同于字段为空、结构体没有可见内容或切片长度为零。本文用结构体、空集合和无效 Value 的对比示例说明边界,并给出更合适的判断选择。156 收藏 -
testing.T.Setenv 修改的是整个测试进程的环境变量,因此不能在并行测试或有并行祖先的测试中使用。本文说明冲突原因、串行拆分方式,以及如何用局部配置让并行子测试保持隔离。470 收藏 -
多个 Go 进程追加写同一个日志文件时,不要先 Seek 再 Write。本文从零实现一个 appendlog 小工具,讲清 O_APPEND 的正确用法、单次写入边界、关闭错误,以及什么时候必须增加锁或外部队列。179 收藏 -
Go 并行子测试要在各自的回调里调用 testing.T.TempDir,让每个用例获得独立且自动清理的目录;父测试提前创建目录再传递会造成共享写入。本文说明目录隔离、并行等待、清理边界和排查清单。375 收藏 -
Go os.File.Sync 成功后仍然需要 Close。本文区分持久化与释放句柄的职责,说明缓冲写入先 Flush、关键文件正确处理 Close 错误,以及替换文件时的收尾顺序。369 收藏 -
Go 的 exec.Cmd.WaitDelay 不只是进程超时参数,它还限制子进程退出后 stdout/stderr 管道迟迟不关闭的等待时间。本文说明计时起点、ErrWaitDelay 与 ExitError 的区别,以及如何安全判断返回值。157 收藏 -
Go os.Rename 在 Unix 与 Windows 下对打开文件的处理不同。本文用同目录临时文件、句柄关闭、进程内读写锁和有限重试,设计不删除旧文件的跨平台替换方案。107 收藏 -
Go 的 Cmd.StdoutPipe 不应与 Run 混用,也不能在 Wait 前抢先关闭读取边界。本文用一条完整生命周期解释 Start、读取、Wait 的正确顺序,并排查管道提前关闭与双管道阻塞问题。293 收藏 -
Go io.TeeReader 不会复制出两个独立 Reader,而是在下游读取时同步把已读字节写入 Writer。本文用缓存、文件和限流组合说明数据方向、错误传播及审计场景的边界。126 收藏 -
Go 的 exec.Cmd.Environ 返回当前命令环境的副本。本文解释旧快照、Env 继承、重复键和启动前检查的关系,给出避免读不到刚设置环境变量的实用写法。465 收藏 -
io.LimitReader 返回 EOF 不代表底层 reader 一定结束。本文拆解 LimitedReader 的读取顺序,用字节数判断边界,并给出固定长度读取与额外探测的选择方法。399 收藏