Go问答技术文章
-
Go 验证码既要在生产环境使用安全随机源,又要让单元测试可重复。本文用一个可注入的随机整数接口,把 crypto/rand 与固定序列测试替身分开,并覆盖长度、字符表和错误处理边界。150 收藏 -
Go 中 crypto/rand 用于令牌、密钥和不可预测的随机值,math/rand 用于模拟、抽样、洗牌和可复现测试。本文用选择清单、代码示例和迁移边界说明两者如何分工。421 收藏 -
Go TLS Config.Clone 是浅克隆,修改共享切片、证书池或闭包状态仍可能引发竞态。本文给出 NextProtos 与 RootCAs 的隔离示例,说明使用后只读、回调依赖和配置切换边界。426 收藏 -
Go TLS 客户端应把域名写入 DNS SAN、IP 写入 IP SAN,并让 tls.Config.ServerName 与真实身份对齐。本文说明 CommonName 的兼容边界、SNI 与主机名校验的关系,以及如何避免用 InsecureSkipVerify 绕过问题。427 收藏 -
Go TLS 客户端自定义 CA 不生效,通常是证书池、RootCAs 或 HTTP Transport 没有接通。本文按证书输入、TLS 配置和请求客户端三层定位问题,并给出保留系统根证书的配置方式。168 收藏 -
Go 处理 tag=go&tag=web 这类重复查询参数时,应使用 url.Values 的切片模型:用 Add 追加、用 values[key] 读取全部值、用 ParseQuery 检查解析错误,并注意 Encode 的键名排序边界。163 收藏 -
Go 中普通表单字段读不到,常见原因不是字段名,而是 application/x-www-form-urlencoded 与 multipart/form-data 的请求体、Content-Type 和解析入口没有对应。本文按场景给出客户端与服务端的配对写法。418 收藏 -
Go http.Client.Timeout 不只限制建立连接,还覆盖重定向和响应体读取;本文从响应头已返回但 Body 仍超时的现象出发,给出整体超时与请求级超时的排查写法。338 收藏 -
Go archive/tar 读取 PAX 长路径时,直接使用 Reader.Next 返回的 Header.Name 即可;本文给出最小读取、内容消费和安全提取写法。177 收藏 -
Go archive/zip 写完条目后如果没有调用 Writer.Close,ZIP 末尾可能没有中央目录,读取端就会报归档损坏。本文说明 Close 的作用、正确收尾方式,以及如何保留 Close 和底层文件的真实错误。109 收藏 -
Go gzip Close 负责补写压缩数据和流尾部,文件 Close 与 Flush 不能代替它。本文给出保留复制、压缩收尾及文件关闭错误的示例,说明失败产物隔离与交付条件。397 收藏 -
filepath.Clean 只做词法规范化,不会把用户路径限制在某个目录,也不会处理符号链接越界和检查使用之间的竞态。本文对比 Clean、IsLocal、Rel 与 Go 1.24 的 os.Root,并给出文件服务的选择清单。277 收藏 -
Go filepath.EvalSymlinks 失败时不要只看字符串。本文用 errors.Is 区分目标不存在、符号链接断裂和权限等错误,并给出可直接改造的排障代码。197 收藏 -
Go sync.Map.Swap 会原子替换键值,并返回替换前的 previous 与表示键是否存在的 loaded。本文用固定类型示例说明首次写入、已有键替换、nil 旧值和类型断言边界。485 收藏 -
Go CSV 变长记录可设置 FieldsPerRecord=-1,再限定列数范围、必填值、字段长度与记录数。本文给出总字节预算加一字节识别超限的示例,并解释多行字段、复用切片与提交边界。292 收藏