Go问答技术文章
-
用户可控 URL 一旦进入 Go HTTP 客户端,字符串黑名单远远不够。本文从一次图片抓取接口的故障切入,拆解 scheme、端口、DNS 解析、私网地址和重定向的校验顺序,并给出可测试的最小实现边界。116 收藏 -
Golang · Go问答 | 2星期前 | WebAssembly · Go问答 · 前端交互 · 浏览器存储 · syscall/js · Go localStorage WebAssembly syscall/js js/wasm Wasm运行时脚本
Go 编译到浏览器 WebAssembly 后,可以通过 syscall/js 调用 localStorage。关键是使用 GOOS=js GOARCH=wasm 构建,保持 Wasm 运行时脚本与编译器大版本一致,把 JavaScript 调用收口并处理存储不可用、JSON 损坏和 MIME 类型错误。122 收藏 -
Golang · Go问答 | 3星期前 | 并发 · 单元测试 · go · Context · AfterFunc · Go问答 context.AfterFunc context.CancelFunc Go回调
Go 的 context.AfterFunc 适合在上下文取消后触发清理动作,但 Stop 返回 false 时回调可能已经开始或即将开始。本文用超时清理场景说明回调生命周期、竞态窗口、幂等保护和测试验收边界。258 收藏 -
Golang · Go问答 | 3星期前 | 标准库 · go · csv · 数据导入 · 错误定位 · Go encoding/csv FieldsPerRecord LazyQuotes ParseError
Go 导入 CSV 时,某一行多一个逗号就可能让整个读取流程报 ErrFieldCount。本文解释 FieldsPerRecord 的默认行为,给出允许可变列、保留原始行号和处理 LazyQuotes 的实战写法,避免把坏数据静默吞掉。224 收藏 -
用 Go strings.Cut 解析 key=value 配置行,区分分隔符缺失、空值和多余分隔符,比较 strings.Split 的误判与基准结果,给出可直接落地的解析边界。207 收藏 -
Golang · Go问答 | 3星期前 | HTTP · 流式处理 · Go问答 · encoding/json · 请求体 · Go DECODE eof 流式解析 json.Decoder JSON请求体
Go 用 json.Decoder 读取 HTTP 请求体时,第二次 Decode 得到 EOF 不一定是异常:它可能代表输入已正常读完,也可能是把单个 JSON 请求误当成了连续流。本文从单对象、尾随空白和多值 JSON 三种边界出发,给出最小判断、严格校验与可复查的读取流程。160 收藏 -
Go 1.25 将 testing/synctest 正式带入标准库,测试超时、定时器和并发协作时不必再真实等待。本文用一个带 deadline 的通知流程说明 synctest.Test、synctest.Wait、时间推进和版本兼容边界。107 收藏 -
Go 1.24 引入 runtime.AddCleanup 后,资源清理不必再把所有希望寄托在 SetFinalizer 上。本文从一个文件句柄包装器切入,解释 Cleanup.Stop、runtime.KeepAlive、回收时机和显式 Close 的边界,并给出可回归的迁移检查。454 收藏 -
Golang · Go问答 | 3星期前 | HTTP · IO · 流式处理 · Go问答 · 性能边界 · TeeReader · io.TeeReader io.Reader 请求体 日志审计 Go问答 流式复制
Go 的 io.TeeReader 会把每次读取到的字节同步写入另一个 Writer,适合做摘要、哈希和审计,但不等于后台复制。本文用请求体落盘场景拆开同步写入、写入错误传播、部分读取和失败清理边界,给出可验证的安全用法。289 收藏 -
Go 程序从一组参数扩展成 build、serve、migrate 等子命令后,直接共用 flag.CommandLine 很快会遇到参数串台、Usage 输出混乱和错误码不一致。本文用 flag.NewFlagSet 搭一个小型命令行入口,拆开 Parse、帮助输出和失败退出的边界。205 收藏 -
Go 1.23 的 slices.Collect 能把迭代器收集成切片,但它不是零成本转换。本文从惰性生成、空序列、容量增长和大结果集几个边界入手,配合可运行代码说明什么时候适合收集,以及如何避免一次性占满内存。470 收藏 -
Golang · Go问答 | 3星期前 | 随机数 · Go问答 · 安全编程 · crypto/rand · math/rand · 验证码 安全 随机数 Go crypto/rand math/rand
Go 里 crypto/rand 和 math/rand 都能生成随机值,但用途完全不同。本文用验证码、抽样和测试数据三个场景拆开安全资产、攻击路径、并发控制与验证方法,给出不容易选错的边界。163 收藏 -
Go 服务把 regexp.Compile 放进请求函数后,正则本身没变,延迟却会随并发上升。本文用基准对比请求内编译、包级预编译和受控缓存,解释编译成本、并发读写与动态规则的边界。479 收藏 -
Golang · Go问答 | 3星期前 | net/http · Go问答 · 接口安全 · 版本迁移 · ServeMux · net/http 通配符 路由冲突 ServeMux Go 1.22 PathValue
Go 1.22 改造了 net/http.ServeMux 的模式语法和优先级,旧项目迁移时最容易踩到方法覆盖、通配符冲突和大括号语义变化。本文用最小代码验证匹配规则、冲突触发条件和上线前的兼容检查。490 收藏 -
Go 的 url.Values 既能表达同名重复参数,也能表达单值参数,但 Add、Set 和 Encode 的组合会直接影响服务端拿到的结果。本文用标签筛选接口说明参数如何构造、编码、解析和验收。386 收藏