Go问答技术文章
-
Go 正则重复捕获组不会保存每次参与的历史值。本文区分完整匹配与子组槽位,给出先约束记录再提取所有单项的写法,并说明 FindAll、命名组和字节索引的边界。480 收藏 -
Go ServeMux 匹配不到路径时,按 Go 版本、路径段、尾斜杠、通配符、HTTP 方法和 Host 逐项排查,掌握 {id}、{path...} 与 {$} 的实际边界。480 收藏 -
Go 服务把 regexp.Compile 放进请求函数后,正则本身没变,延迟却会随并发上升。本文用基准对比请求内编译、包级预编译和受控缓存,解释编译成本、并发读写与动态规则的边界。479 收藏 -
用 Go filepath.IsLocal 先拦截绝对路径和 .. 路径,再配合 Join 与符号链接复核,建立文件下载场景的安全边界。479 收藏 -
slices.Clone 会复制元素并保留输入切片的 nil 语义;copy 只搬运元素,目标切片是否为 nil、长度够不够,都由调用方先决定。本文用对照代码说明两者的边界。479 收藏 -
Go test -race 通过并不等于业务状态一定一致。本文从执行覆盖、同步关系和多字段不变量三层排查数据异常,并给出可复查的修复清单。479 收藏 -
sort.SliceStable 会在原切片上稳定排序,不会先复制整份元素;如果要保留原顺序,需要先复制切片,但嵌套指针仍需单独深拷贝。479 收藏 -
Go 服务端关闭 HTTP/2 后,客户端仍可能复用已经建立的 HTTP/2 连接。本文区分协议策略与连接生命周期,给出 Server.Protocols、Transport 清理和 httptrace 验证方法。479 收藏 -
Go 的 time.Time 同时承载墙上时间和进程内单调读数,但 JSON 只序列化可跨进程解释的日历时刻。本文说明丢失原因,以及持久化时间、耗时测量和时间比较的正确分工。479 收藏 -
从本地快速改动与跨环境复现两个联调目标出发,对比 Go Modules 的 replace 和 alpha/beta 预览版本,给出选择、检查与收口方法。479 收藏 -
Go 使用 archive/zip 解包时,不能把 ZIP 条目名直接拼到目标目录。本文用相对路径校验、安全根目录映射和先校验后写盘的代码,处理绝对路径、../、反斜杠及 ErrInsecurePath,并说明符号链接和共享目录的额外边界。479 收藏 -
Go sync.Pool.Get 取到 nil 并不一定是异常,空池、运行时丢弃对象和未配置 New 都可能触发该分支。本文说明如何用 New 集中创建责任、处理类型断言、清理状态并判断对象是否适合放入 Pool。479 收藏 -
Go workspace 明明写了 use 却没有使用本地模块,通常是路径没有指向 go.mod 所在目录、嵌套模块没有单独加入,或当前命令根本没有加载目标 go.work。本文按症状拆开判断和修复方法。479 收藏 -
Go range 遍历结构体切片时,迭代变量拿到的是元素值副本;本文对比索引、指针切片和 map 的写法,说明怎样让字段修改真正写回原数据。478 收藏 -
Go 中值类型不能赋给接口,常见原因是接口要求的方法由指针接收者声明,因而只进入 *T 的方法集。本文用最小示例区分方法调用的自动取地址与接口赋值规则,并给出值接收者、指针接收者和编译期断言的判断方法。478 收藏