Go问答技术文章
-
Golang · Go问答 | 1个月前 | goroutine · HTTP · Context · 超时控制 · Go问答 · WithTimeout Go问答 context取消 QueryContext HTTP请求取消 goroutine退出
Go HTTP 请求断开后,r.Context() 会收到取消信号,但服务端慢任务不会凭空停止。只有把 context 继续传给数据库、下游 HTTP 调用、消息消费和 goroutine,取消与超时才会真正变成资源释放动作。120 收藏 -
sync.Map.LoadOrStore 会根据键是否已经存在,在并发初始化时返回新值或旧值。本文用一个可运行的缓存初始化例子拆开 loaded、类型断言和重复构造的边界。120 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · golang · 正则表达式 · 字符串处理 · Go问答 · 正则表达式 Go regexp FindAllStringSubmatchIndex 子表达式
Go regexp 的 FindAllStringSubmatchIndex 返回结果中出现 -1,并不代表整体匹配失败,而是某个可选子表达式没有参与本次匹配。本文用一个可运行示例解释下标含义、判断方式和切片边界。120 收藏 -
Go 的 flag.Func 适合把重复出现的命令行参数交给同一个回调逐次处理,但默认值不会自动触发回调,回调返回错误还会改变 Parse 的结果。本文用可运行示例拆清调用次数、参数顺序与失败边界。120 收藏 -
Go 的 PathEscape 与 QueryEscape 都能处理 URL 特殊字符,但服务端解析位置不同。本文用路径参数、查询参数和反向解析示例,说明编码边界、加号语义与测试方法。119 收藏 -
Golang · Go问答 | 1星期前 | 并发 · 日志 · 标准库 · go · 错误排查 · 异步日志 handler log/slog Go slog.Record.Clone 属性生命周期
slog.Handler 收到的 Record 可能携带共享属性存储。单份转发通常可直接传递,多份分发或异步保留时应调用 Record.Clone,本文用 fan-out 与异步队列场景说明修改、并发和生命周期边界。119 收藏 -
用户可控 URL 一旦进入 Go HTTP 客户端,字符串黑名单远远不够。本文从一次图片抓取接口的故障切入,拆解 scheme、端口、DNS 解析、私网地址和重定向的校验顺序,并给出可测试的最小实现边界。116 收藏 -
用 Go 标准库 log/slog 的 WithGroup 把请求、用户和数据库字段分组,结合 TextHandler 验证输出结构,并说明 Handler 实现与常见误区。116 收藏 -
Go 使用 html/template 渲染表单时,校验失败不应只返回一句错误文本。本文用一个注册表单拆开 POST 分支、FormData 回填、字段级错误与焦点提示的调用链,并给出可回归的实现边界。116 收藏 -
Go 服务出现 too many open files 时,先不要只把 ulimit 调大。更可靠的处理顺序是确认 FD 是否持续增长、按类型定位 HTTP 响应体/文件/SQL Rows 的释放缺口、在小流量修复后观察 FD 回落,再决定是否需要调整进程限额。文章给出可直接照着做的线上判断、代码修复、回退和告警检查。115 收藏 -
Go 1.22 起可以直接对整数使用 range。本文用可运行的小例子说明 range n 实际遍历的范围、零值和负数边界、变量声明规则,以及旧版本项目如何选择兼容写法。114 收藏 -
Go 的一次性值闭包适合把昂贵初始化延迟到第一次真正使用时,并保证并发调用只执行一次。本文用标准库代码说明闭包状态、panic 记忆和失败返回值的边界。113 收藏 -
Golang · Go问答 | 1个月前 | golang · 超时 · HTTP · Go问答 · Transport · 网络排查 · 连接超时 http.Transport Client.Timeout Go HTTP 客户端超时 TLS握手超时
Go 的 http.Client 超时太粗时,DNS、建立连接、TLS 握手和响应读取会混在同一个等待里。本文用一段可复现的慢请求场景拆开 Transport 参数,给出基线指标、改动方案和复测边界。112 收藏 -
Go 里用 slices.Delete 删除元素后,切片长度变小不代表底层数组立刻释放。要结合 Go 版本、元素类型、尾部引用是否清零和切片是否继续持有容量来判断 GC 边界。本文从批量过滤场景拆开删除、复用与内存回收的关系。112 收藏 -
Go 的 os.File.Chmod 并不是跨平台等价的权限开关:Unix 会使用权限位及特殊模式位,Windows 当前只看 0o200 来切换只读属性。本文用同一段代码拆开模式位、符号链接和平台边界,给出可验证的写法。112 收藏