Go语言技术文章
-
ResponseController.Flush 返回成功只代表 Go 端把当前缓冲交给下一跳,经过反向代理后仍可能被代理继续缓存。排查时先确认 ResponseWriter 的 Flush 能力,再关闭对应接口的 proxy_buffering 或设置 X-Accel-Buffering: no,并区分直连与代理链路。156 收藏 -
Go test -run 使用不锚定正则筛选测试,遇到子测试时还会按斜杠拆分名称;本文整理顶层测试、t.Run 路径、名称清洗和命令引号导致匹配不到的排查方法。156 收藏 -
Go 的 csv.Reader 遇到不等长字段时返回 ErrFieldCount,根因通常是 FieldsPerRecord 的固定字段数约束。本文解释 0、正数、负数三种配置的差异,并给出严格校验、容忍变长记录和按业务规则整形的实用写法。156 收藏 -
Go embed pattern 无匹配文件时,先按源码包目录定位资源,再恢复编译前的真实产物。结合包内目录示例说明空目录、隐藏文件、上级路径与构建流水线的修复取舍。156 收藏 -
sync.Once 的回调函数内部再次调用同一个 Once.Do 时不会被当作已完成调用,而是等待当前回调结束,因此会卡在同一把互斥锁上。本文拆解死锁原因并给出不重入的初始化写法。156 收藏 -
Go filepath.Match 的反斜杠规则会随操作系统变化:Unix 类系统把 \c 当作对字符 c 的转义,Windows 则把反斜杠当作路径分隔符。本文用最小示例说明通配符、完整匹配、ErrBadPattern 和跨平台写法。156 收藏 -
Go 的 net/http.Header.Get 只返回一个值。本文用可复现的响应头示例说明 Header.Get、Header.Values 与 Header.Add 的关系,帮你判断何时该读取单值、何时必须遍历全部值。155 收藏 -
Go 1.27 为 go/scanner.Scanner 增加 End 方法。本文用 token.Pos、token.File.Offset 和半开区间说明它如何给源码分析工具提供可靠的 token 结束位置,避免继续手算偏移。155 收藏 -
Go 的 defer 可能在函数真正返回前修改命名返回值。本文用错误包装场景拆开 return 与 defer 的执行顺序,并给出显式返回、只读观测和测试检查的实用写法。155 收藏 -
GOPROXY=off 不是使用本地缓存的开关,而是禁止 go 命令从任何来源下载模块。本文从 GOMODCACHE、go.sum、vendor 和 file 代理几个边界说明新依赖失败的原因,并给出可复现的离线构建处理方式。155 收藏 -
Go encoding/csv 开启 ReuseRecord 后,Read 返回的记录切片可能与下一次读取共享底层数组。本文用 goroutine 场景说明何时复制 []string,以及如何避免异步任务读到被覆盖的数据。155 收藏 -
在 Go 的 cgo 代码里,C.GoString 适合读取以 NUL 结尾的 char*,C.GoStringN 适合长度明确的数据;反向使用 C.CString 时还要释放 C 堆内存。本文用一个小示例把三种边界讲清楚。155 收藏 -
Go 的 sql.Stmt 可以被多个 goroutine 并发使用,但 Close 不等于取消查询。本文说明正在执行、Rows 返回后和优雅停机时的正确关闭顺序。155 收藏 -
Go 的 archive/tar 适合流式读取归档。本文区分 Header 与 payload,演示只保留文件头元数据、用固定缓冲区消费内容,并说明超大条目和异常归档的内存控制边界。155 收藏 -
Go 的 net.Resolver.LookupAddr 反向解析返回的是名称切片,遇到多个 PTR、部分结果、无记录或超时不能只判断一个字符串。本文用带超时的示例说明如何保留可用结果、分类处理错误,并把结果整理成稳定日志字段。155 收藏