Go问答技术文章
-
用 Go 标准库 log/slog 的 WithGroup 把请求、用户和数据库字段分组,结合 TextHandler 验证输出结构,并说明 Handler 实现与常见误区。116 收藏 -
Go 使用 html/template 渲染表单时,校验失败不应只返回一句错误文本。本文用一个注册表单拆开 POST 分支、FormData 回填、字段级错误与焦点提示的调用链,并给出可回归的实现边界。116 收藏 -
Go 的 Write 返回成功不代表文件已经写出:使用 bufio.Writer 时,数据可能仍在缓冲区。本文用一个完整写文件函数说明 Flush、Close、路径和打开模式的排查顺序。116 收藏 -
Go 的 url.QueryUnescape 把加号解成空格是查询编码规则,不是字符串损坏。本文用对比例子说明查询参数、路径文本、QueryEscape 和错误处理应该如何配套使用。116 收藏 -
Go fuzz 失败后会把可复现输入写入 testdata/fuzz 目录。本文说明如何区分 seed corpus 与缓存语料,用 go test 精确重放、理解最小化输入,并把失败文件保留为回归测试。116 收藏 -
说明 Go net.Resolver 如何通过 LookupIP 的 ip4/ip6 和 DialContext 的 tcp4/tcp6 表达地址族偏好,区分 PreferGo、StrictErrors 与真正的 IPv4/IPv6 选择边界。116 收藏 -
用 Go testing/fstest.MapFS 在内存中构造文件树,让依赖 fs.FS 的读取逻辑脱离临时目录,并覆盖内容、目录和缺失文件测试。116 收藏 -
Go 服务出现 too many open files 时,先不要只把 ulimit 调大。更可靠的处理顺序是确认 FD 是否持续增长、按类型定位 HTTP 响应体/文件/SQL Rows 的释放缺口、在小流量修复后观察 FD 回落,再决定是否需要调整进程限额。文章给出可直接照着做的线上判断、代码修复、回退和告警检查。115 收藏 -
Go channel 关闭后仍能接收,是因为关闭且排空的 channel 会立即返回元素类型零值;带 ok 的接收可以区分真实发送值和关闭信号。本文用最小示例说明缓冲排空、ok 判断与常见误区。115 收藏 -
Golang · Go问答 | 6天前 | 连接池 · 性能排查 · HTTP客户端 · Go问答 · Go net/http Transport HTTP连接复用 DisableKeepAlives TCP keepalive
Go 的 Transport.DisableKeepAlives 控制 HTTP keep-alive 与连接复用,不等于 TCP keepalive。本文用请求序列、连接池边界和可观察代码说明关闭后的影响,以及适合关闭和保持默认值的场景。115 收藏 -
Go 使用 archive/tar 解包时,先把 Header.Name 归一化为目标目录内的相对路径,再用 filepath.Rel 判断边界,并分别处理目录、普通文件和符号链接。115 收藏 -
Go 文件跨盘迁移不要直接依赖 os.Rename;应在目标目录创建临时文件,复制并重新计算 SHA-256 校验,确认一致后再 Rename 替换目标,成功后按需删除源文件。115 收藏 -
Go 1.22 起可以直接对整数使用 range。本文用可运行的小例子说明 range n 实际遍历的范围、零值和负数边界、变量声明规则,以及旧版本项目如何选择兼容写法。114 收藏 -
Go 泛型函数的类型推断失败,通常不是函数体问题,而是普通实参、赋值上下文或类型约束没有共同解。本文用最小示例拆解常见报错,并给出显式实例化和边界检查方法。114 收藏 -
Go encoding/base64 的 NewEncoder 会把不足一个完整分组的尾部数据暂存在内部,必须调用 Close 才能刷新到目标 Writer。本文用最小代码说明正确关闭顺序、StdEncoding 与 RawStdEncoding 的 padding 边界,以及 io.Copy、文件资源和错误处理的组合方式。114 收藏