Go问答技术文章
-
Go gzip 解压后文件名为空,通常不是数据损坏,而是 gzip Header 没有可选的 Name 字段。本文说明如何在 Writer 端保存文件名、在 Reader 端读取并处理空值,以及跨系统传输时怎样设计可靠的文件名兜底。483 收藏 -
Go 的 os.ReadFile 遇到符号链接时默认读取链接目标内容;本文对比 ReadFile、Stat、Lstat 和 Readlink,说明如何区分目标文件、链接自身与链接保存的路径。483 收藏 -
Go errors.As 返回 false 时,先看错误实现的 Error 接收者和实际动态类型,再决定目标变量是 *T 还是 T。本文用一个小型校验错误示例说明指针错误、值错误、%w 包装和常见声明误区。483 收藏 -
连接超时不限制响应体读取。通过有限响应客户端示例区分拨号、响应头和总预算,处理 context 生命周期、读取错误、正文大小与关闭责任,并说明流式请求的不同策略。483 收藏 -
Go Colly 默认会记录已经访问过的 URL,所以同一个地址第二次 Visit 常见返回 ErrAlreadyVisited。本文从复现、允许重复访问、分页参数和重试边界说明怎样处理,避免用全局开关掩盖请求设计问题。482 收藏 -
Go module graph 出现同一模块多个版本时,不能只看 go.mod。本文用 go mod graph 追踪依赖边,再用 MVS、go list -m all、go mod why -m 和 replace、exclude、go.work 边界判断最终 selected version。482 收藏 -
区分Gonum Dense.Solve的维度panic与Condition返回错误,用原创方阵示例说明输入合同、接收器复用、数值可靠性和失败结果处理。482 收藏 -
Go beep 的采样率转换用于让源流适配播放设备,修改播放速度则通过 ResampleRatio 或 SetRatio 改变流的消费密度。本文对比 Format、Resample、ResampleRatio 和 SetRatio 的职责与选择边界。482 收藏 -
pkg.go.dev API 的 latest 代表索引已识别的最新模块版本,不等于仓库默认分支或任意 Git 标签。本文从语义化标签、子模块前缀、主版本路径和索引传播四层排查差异,并给出最小验证命令。481 收藏 -
database/sql 扫描 SQL NULL 时,普通 string、int 字段无法表达空值语义。本文从扫描失败现场入手,分别使用 sql.Null* 与 Go 1.22 的 sql.Null[T],再把数据库 DTO 转换为业务结构体,给出单行、批量查询和写回数据库的稳定做法。481 收藏 -
Go AddDate 按业务时区增加日历日,Add 增加固定时长。用完整示例比较钟表字段、UTC 偏移和实际间隔,解释跨夏令时的差异及不存在或重复时刻的边界。481 收藏 -
Go math/rand/v2 的 ChaCha8 在同一份 [32]byte 种子和同一调用方式下可以复现原始 Uint64 序列;如果序列不同,优先排查种子字节、实例是否已被消费、Read 与 Uint64 是否交错,以及是否把 Rand 的派生方法误当成固定一步消费。481 收藏 -
os.Readlink 返回的是符号链接保存的目标文字。本文说明相对目标为什么要以链接所在目录为基准,如何处理绝对路径和错误边界,以及何时改用 filepath.EvalSymlinks。481 收藏 -
Go testing.T.Chdir 改的是整个测试进程的当前工作目录。本文用父子测试和 Cleanup 的嵌套场景,解释目录变化的可见范围、恢复顺序与并行限制,并给出更稳妥的测试组织方式。480 收藏 -
Go base64.Encoding.Strict 会额外检查末尾量子中的填充位是否为零。本文用一个最小示例解释非零填充位、CorruptInputError、换行忽略和标准编码修复之间的关系,帮助定位严格解码失败。480 收藏