Go问答技术文章
-
Go 客户端自定义 TLS 拨号或按 IP 连接时,ServerName 缺失会破坏主机名校验与 SNI 证书选择。本文区分拨号地址、证书身份和根证书信任,给出 http.Transport 与 tls.Client 的安全修复写法。440 收藏 -
Go 的 http.Client 跨主机重定向后看不到 Authorization,通常是默认的敏感头保护。本文用 CheckRedirect、可信 Origin 和手动跟随策略,给出安全可控的处理方式。435 收藏 -
本文用一个只依赖标准库的 Go 小工具说明 pem.Block.Headers 如何写入自定义头字段,解释 pem.Encode 的稳定输出、错误处理、Decode 回读与测试夹具设计。434 收藏 -
Go io.MultiReader 只有在当前 Reader 返回精确的 EOF 时才会切换到下一个输入;遇到非 EOF 错误会先把错误返回给调用方,不会自动跳过当前 Reader。本文用连续 Read 示例说明 n、err 和 Reader 切换之间的关系。431 收藏 -
filepath.WalkDir 遇到权限目录时,错误会通过回调参数传入,而不是自动跳过。本文区分入口访问失败与子目录读取失败,说明 d 和 err 的判断方式,以及 return nil、filepath.SkipDir 和原样返回错误的取舍。430 收藏 -
Go regexp 会把无效 UTF-8 输入中的异常字节按 utf8.RuneError 处理,而不是保留原始字节。本文对比先拒绝、规范化后匹配和改用 bytes 做字节级查找三种方案,帮助你按数据边界选对实现。430 收藏 -
Go 的 text/template 报 function not defined 时,优先检查 FuncMap 是否在 Parse 前注册。本文用最小示例说明正确注册链、集中构造方式,以及解析后替换函数的边界。427 收藏 -
Go regexp 允许多个捕获分组使用同一个名称,真正的编译错误通常来自命名语法、括号闭合、转义或不支持的 Perl 扩展。本文用最小模式、syntax.Error 和 SubexpIndex 拆开排查路径,并给出生产代码中的命名策略。426 收藏 -
Go 的 time.Parse 使用参考时间表达布局,-0700 代表无冒号的数值时区偏移模板,而不是固定的西七区。本文用输入对照和最小示例说明如何选择 -0700、-07:00 与 Z07:00。422 收藏 -
Go ast.FilterFile 不只是按名称裁剪顶层声明,它还会无条件移除导入声明。本文用一份带导入、类型和函数的 AST 拆开过滤边界,说明返回值、字段过滤和保留原始导入的处理选择。417 收藏 -
Golang · Go问答 | 1分钟前 | Go教程 · Go问答 · 文件系统 · Go afero CopyOnWriteFs CopyOnWriteFs 写入 base layer overlay 文件系统
Go afero CopyOnWriteFs 读取基础层成功但原文件不变,是因为写操作会把 base 文件复制到 layer,再只修改覆盖副本。本文从源码关系拆解读写边界,并说明预览隔离、显式同步和直接使用 OsFs 的选择。417 收藏 -
调整 GOGC 或 runtime/debug.SetGCPercent 后,延迟不会按固定方向变化。本文用固定工作负载、隔离的基准样本和延迟分位数,对照分析 GC 频率、堆空间、吞吐与 p95/p99 的关系。416 收藏 -
Go 原生 fuzz 测试发现 panic 后,先固定失败语料并用 -run 稳定重放,再定位最小输入边界、修复校验逻辑,最后保留 corpus 作为回归测试资产。414 收藏 -
Go mime.ExtensionsByType 做 MIME 到扩展名的反向查询时,结果可能包含多个带点后缀。本文说明如何把它当作候选集合,并用业务格式、用户偏好或稳定排序选择默认后缀,同时明确它不负责检测文件内容。400 收藏 -
sync.RWMutex 不支持把 RLock 升级为 Lock,读锁未释放时申请写锁会等待自己释放读锁而形成阻塞。本文用原创代码对比拆分读写临界区与直接使用单写锁的改造方案,并说明重新检查、锁复制和对象生命周期边界。395 收藏