Go问答技术文章
-
Go 测试本机通过而 CI 失败,通常是工具链、模块目录、构建条件或运行资源不同。本文用环境摘要、关闭缓存、结构化日志和测试门禁,把模糊失败变成可复现、可对比的问题。279 收藏 -
解释 os.DirFS 与 fs.ValidPath 只能约束 fs 路径语法,为什么仍挡不住根目录中的符号链接或相对根目录变化,并给出使用 os.Root 的迁移方式。342 收藏 -
filepath.Join 会清理路径文本,但不会替应用保证结果仍在指定根目录内。本文用最小示例说明 Join、IsLocal 与 os.OpenInRoot 的边界,并给出四类输入的验证矩阵。372 收藏 -
os.Stat 成功不保证后续 Open 成功。文章说明路径竞态、权限差异与文件句柄的区别,给出直接打开、限量读取和错误分类示例,并划清排他创建与可信根目录访问的边界。369 收藏 -
Go 的 io.Reader 允许在最后一批数据返回 n > 0 与 io.EOF,若代码忽略 n、处理空缓冲区或把整个 buf 当成有效数据,就会出现末尾多处理一次。本文用最小示例说明原因,并给出按 n 与 err 分开处理的可靠写法。300 收藏 -
Go 的 url.URL.String 可以保留 # 后的 Fragment,但 RequestURI 只生成 HTTP 请求需要的路径与查询部分,因此看起来像是 Fragment 丢失。本文用最小示例说明两者的边界,并给出需要把片段信息传给服务端时的改造方式。216 收藏 -
Go 的 encoding/csv 负责解析记录和字段,不会自动识别 GBK 或 GB18030。本文从 UTF-8、GBK 解码边界出发,说明中文 CSV 出现乱码的原因与可直接复用的修正写法。126 收藏 -
Go JSON 时间字段解析失败,应先区分 JSON 类型、RFC3339 格式与时区契约。结合标准字段和旧格式输入示例,说明 ParseInLocation、空值、必填检查及常见格式误区。268 收藏 -
Go 的 os.ProcessState.SysUsage 返回平台相关的资源使用对象,不同系统的底层类型和字段语义并不完全相同。本文从 ProcessState 的生命周期、类型观察、平台适配和生产日志四个方面说明如何安全使用。135 收藏 -
Go 的 url.PathUnescape 遇到尾部百分号或非十六进制编码时会返回错误。本文用最小代码说明如何判断输入、区分路径和查询解码,并在进入业务逻辑前安全处理坏路径。426 收藏 -
Go HTTP 服务端重复读取 Body 得到空内容,通常是中间件已消费原流。通过小服务说明入口限量缓存、重建读取器、错误处理与关闭边界,并区分 GetBody 和已解析对象复用。232 收藏 -
Go ServeMux 出现路由冲突时,先沿注册阶段的 panic 栈找到两个 pattern,再比较方法、主机和路径的具体程度;交换注册顺序不能解决同等具体的冲突。149 收藏 -
区分 time.Time 零值与 Unix epoch 的语义,说明 IsZero、Unix、可选时间字段和数据库时间字段应该分别怎样判断。278 收藏 -
从 context 没有传递、HTTP 请求未绑定 context 和自定义等待未监听 Done 三个角度,说明 Go 超时后下游仍在执行的原因与修正方式。490 收藏 -
Go goroutine 退出不会自动关闭 channel。本文区分发送阻塞、接收等待与取消确认,用固定工作者和单一关闭者说明提前停止消费的处理方式。234 收藏