Go语言技术文章
-
time.Duration 本质是纳秒数,直接转成整数时会按目标单位截断小数。本文从接口参数和调用方预期出发,拆解单位常量、整数除法、浮点换算与超时配置的边界,给出可核对的写法。288 收藏 -
Go 用 strconv.AppendInt 把整数追加到 []byte 时,关键不是记住一个性能结论,而是看清切片长度、容量和底层数组何时变化。本文用可运行代码说明复用缓冲区的边界,并处理别名切片带来的覆盖问题。287 收藏 -
Golang · Go问答 | 1天前 | 超时 · go · 外部命令 · 进程管理 · CommandContext · wait 子进程 进程超时 Go外部命令 CommandContext 命令启动
CommandContext 超时并不等于所有子进程都已退出。本文用可运行示例拆解 Start、Process、Wait 与子进程继承关系,给出可核对的超时收尾写法。287 收藏 -
Go 1.27 为 go doc 增加 -ex,并支持 package@version 查询。本文用 bytes.ExampleBuffer 演示如何找到可执行示例,说明模块版本边界、输出范围和旧工具链的兼容检查。286 收藏 -
slices.DeleteFunc 适合按条件批量删除切片元素,但回调遍历的是原切片语义,不能在回调里再改同一个切片。本文用可运行示例拆开保序删除、索引变化和尾部清零带来的内存边界,并给出何时改用一次性筛选。285 收藏 -
用 context.WithCancelCause 把请求取消的真实原因带过边界,并通过 errors.Is、context.Cause 和并发测试确认错误链没有丢失。284 收藏 -
Golang · Go教程 | 1天前 | 网络编程 · IPv6 · Go教程 · 代码质量 · go vet · IPv6 net.Dial Go 1.25 go vet hostport net.JoinHostPort
Go 1.25 的 go vet 新增 hostport 分析器,可以发现用 fmt.Sprintf 拼接 host 和 port 后传给 net.Dial 的 IPv6 地址错误。本文从错误现场出发,改用 net.JoinHostPort,并用 vet 与运行测试核对修复结果。284 收藏 -
Go 反射处理结构体元数据时,可以用 reflect.Type.Fields 按声明顺序遍历 StructField,再通过 Tag.Lookup 读取标签;需要同时拿到字段值时使用 reflect.Value.Fields。本文从字段扫描、标签校验到嵌套结构体边界给出可运行示例。283 收藏 -
用 reflect.Value.Seq2 把 map、slice 和自定义迭代器统一接入泛型消费逻辑,说明 CanSeq2 的预检边界、Value 解包方式以及容易触发 panic 的场景。282 收藏 -
Go slog.JSONHandler 的 ReplaceAttr 不只是删字段:本文用真实调用路径说明 groups、Attr 和零值 Attr 的边界,给出隐藏敏感日志字段的安全写法。282 收藏 -
Go 1.24 引入的 os.Root 能把文件操作限制在指定目录内,但它不是忽略符号链接的黑盒。本文用 OpenRoot、Root.Open 与 Root.FS 拆解路径越界、目录链接和 DirFS 的边界。280 收藏 -
线上接口偶发慢几百毫秒,等问题出现后再启动完整 trace 往往已经晚了。Go 1.25 的 runtime/trace.FlightRecorder 会把最近一段运行轨迹保存在内存环形缓冲区,异常触发时再导出,本文说明 MinAge、MaxBytes、Start、WriteTo 的最小用法和生产边界。279 收藏 -
io.MultiWriter 会按传入顺序逐个写入,某个 Writer 返回错误或短写入后立即停止,不会继续后面的目标。本文用日志分流场景拆解部分写入、ErrShortWrite、重试与一致性边界。279 收藏 -
Go 中 bytes.Buffer 适合逐步写入并把内容交给下游读取,bytes.Reader 适合只读字节切片、定位游标和重复读取。本文用一个小实验拆开两者的状态变化与选择边界。279 收藏 -
Go 服务偶发变慢时,runtime/metrics 能把 GC 频率、暂停和堆目标放到同一组可采样指标里。本文从一次延迟抖动开始,说明如何选指标、对齐时间窗口,并排除把正常回收误判成 GC 压力。278 收藏