Go问答技术文章
-
Go x/text/collate 的 CompareString 比较的是指定语言环境下的 Unicode 排序关系,不是字符串的 UTF-8 字节序。本文用最小示例说明 locale、返回值、比较选项和排序接入方式。348 收藏 -
Go cases.Title 实现标题式大小写,不会将每个单词全部转成大写。本文比较 Title、NoLower 与 Upper,说明语言标记、单词边界、分块状态和显示字段的处理。204 收藏 -
io.LimitReader 读到上限后返回 EOF 是设计出来的正常结束信号,不是超限报错。本文从 Reader 契约出发,说明如何用 limit+1 的策略识别输入是否真的超过上限,并比较 LimitReader、ReadFull 与 ReadAtLeast 的适用边界。334 收藏 -
Rows.Columns 返回列名顺序,Rows.Scan 按位置写入目标地址。本文解释固定列与动态列的对应规则,并处理 NULL、Close 和 Err 的常见边界。143 收藏 -
Go url.JoinPath 接收已转义路径元素,保留百分号编码并不异常。通过 Path、RawPath、EscapedPath 的区别和原始名称构造示例,说明斜杠、点段与重复转义的处理方法。343 收藏 -
atomic.Pointer[T] 中的 T 决定了它保存的指针类型以及 Store、Load、Swap 和 CompareAndSwap 的参数与返回值。本文解释 Go 为什么要求指针类型一致,并给出共享配置对象的安全用法与复制、可变性边界。306 收藏 -
bytes.Buffer.WriteByte 的 error 固定为 nil 并不是漏掉了错误处理,而是为了匹配 bufio.Writer 的接口形状。本文说明单字节写入、字符写入与容量边界的区别。402 收藏 -
regexp.FindReaderIndex 返回的是 UTF-8 字节偏移,不是字符序号。本文解释中文文本中的位置差异,并给出保留原文后把字节区间换算为 rune 位置的方法。491 收藏 -
Go HTTP Server 读取请求体后响应变慢,常见原因不是 ResponseWriter 本身,而是客户端上传尚未完成、处理器在等待 Request.Body,或 HTTP/1.x 连接仍有未消费的数据。本文用一个带大小限制的上传接口拆分耗时,说明正确读取顺序、连接复用边界和日志定位方法。452 收藏 -
Go 交叉编译找不到目标系统头文件,通常是 cgo 使用了宿主机编译器,或目标 sysroot、第三方开发包不完整。本文按 cgo 开关、CC、sysroot、pkg-config 和链接阶段给出排查顺序。390 收藏 -
Go race 主要观察单个进程内 goroutine 对共享内存的并发访问。本文解释跨进程文件、IPC 和数据库问题为什么不会自动产生 race 报告,并给出按共享媒介分层排查的方法。126 收藏 -
Go t.Cleanup 会在测试及其子测试完成后执行清理函数,同一作用域遵循后注册先调用。本文用资源注册栈、父子测试边界和 defer 对照,说明如何预测释放顺序并安排资源依赖。382 收藏 -
Go fuzz 测试读取相对路径文件失败,通常不是 fuzz 引擎改变了规则,而是相对路径基准与预期不一致。本文说明 go test 的包目录语义、testdata 夹具布局、fuzz 回调的并发边界,以及 go:embed 和显式绝对路径的取舍。142 收藏 -
TestMain 控制包级测试入口,错误的 os.Exit 可能覆盖子测试失败状态。本文说明正常返回的退出语义、保留 m.Run 结果的方法,以及辅助函数清理、CI 状态传播和并行子测试的边界。461 收藏 -
Go 的 GOFLAGS 会把已知命令行参数注入到默认行为中,且可能来自当前 shell 或 go env -w 的持久配置。本文用 go test、go list 和 go env 说明它的来源、覆盖顺序与清理方法。240 收藏