Go问答技术文章
-
Golang · Go问答 | 2星期前 | 中间件 · go · 认证 · 安全 · net/http · net/http 认证中间件 Go问答 BasicAuth WWW-Authenticate
Go 的 BasicAuth 适合内部管理端、健康检查或临时保护,但 Request.BasicAuth 只负责解析,不替你决定空密码、认证失败状态码和日志内容。本文从一个标准库中间件出发,补齐 401、WWW-Authenticate、凭据校验、权限边界和测试核对。451 收藏 -
Go 扫描上传目录或日志目录时,os.ReadDir、File.Readdir 和 filepath.WalkDir 的内存与排序行为并不一样。本文用一个目录索引小实验说明如何按需读取 DirEntry、避免无意排序,并在权限错误和部分结果场景下保留可用数据。478 收藏 -
Golang · Go问答 | 2星期前 | 微服务 · Context · go并发 · 错误诊断 · 请求取消 · Go 错误处理 context.WithCancelCause context.Cause 取消原因 ctx.Err
服务日志里只出现 context canceled 时,ctx.Err() 只能告诉你流程停了,却说不清是用户取消、上游超时还是业务主动终止。本文用 Go 1.20 引入的 context.WithCancelCause 和 context.Cause 改造一个批量查询场景,说明旧代码影响、兼容边界、错误分类与最小验证方法。465 收藏 -
Go 1.24 为基准测试增加 testing.B.Loop,能替代手写 b.N 循环,让每次基准运行只做一次昂贵的准备和清理,也减少循环体被编译器过度优化的机会。本文对比旧写法,演示迁移步骤,并说明基准数据变化时该怎么判断。243 收藏 -
Golang · Go问答 | 2星期前 | go · 性能排查 · net/http · HTTP客户端 · httptrace · DNS tls 连接复用 httptrace Go问答 HTTP请求慢
Go HTTP 客户端变慢时,只看总耗时无法判断卡在 DNS、建连、TLS 还是服务端响应。本文用 httptrace.ClientTrace 采集分段时间,结合连接复用标记和最小复查清单,定位一次请求变慢的真正环节。393 收藏 -
支付渠道一多,业务代码很容易被供应商 SDK 和字段差异拖住。本文用 Go 拆出支付端口、渠道适配器和业务用例,演示如何保持核心接口稳定,并处理超时、重复回调和渠道错误映射。293 收藏 -
当一个 HTTP 请求体里连续放着多个 JSON 值时,json.Unmarshal 只能处理单个完整值。本文用 json.Decoder 循环读取连续 JSON,区分正常 EOF、语法错误和尾部脏数据,并给出请求体大小限制、空白字符和资源关闭的检查方法。458 收藏 -
Go 服务收到 SIGTERM 后,ListenAndServe 已经返回但进程仍迟迟不退出,通常不是 Shutdown 失效,而是活跃连接、长请求、HTTP/2 或 hijack 连接没有走完各自的收尾路径。本文用 ConnState、Shutdown 超时和 RegisterOnShutdown 拆开判断顺序,并给出可回归的优雅退出实现。150 收藏 -
Go 服务里调用 context.WithCancel 后忘记 cancel,可能让定时器和子 goroutine 活得比请求更久。本文用一个可复现的小例子,说明 defer cancel 的正确位置、循环里的取消边界,以及如何用 goleak 和 pprof 复查。122 收藏 -
读取日志头、文件摘要或上传内容前 N 个字节时,io.LimitReader、io.CopyN 和手动缓冲的行为并不一样。本文按目标是限制读取、严格读取还是复用缓冲,给出选择边界、EOF 判断和可验证示例。130 收藏 -
sync.Cond 的 Wait、Signal 和 Broadcast 不是消息队列,正确用法是持锁检查条件、循环等待,并在状态变化后通知。本文用任务队列示例解释信号丢失、虚假唤醒和关闭退出的处理边界。393 收藏 -
Go 1.24 新增的 os.Root 可以把文件操作限制在指定目录内,减少路径拼接带来的越界风险。本文用一个导入任务目录演示 Open、Join、Mkdir 和遍历文件的安全边界,并用回归测试核对绝对路径、.. 路径和符号链接场景。340 收藏 -
Go database/sql 连接池参数怎么配?本文用 MaxOpenConns、MaxIdleConns 和 ConnMaxLifetime 做一次最小实验,区分连接不足、等待过长与连接复用失效,并给出可验收的指标。494 收藏 -
Go 服务接收突发任务时,直接为每个任务创建 goroutine 容易让内存和下游资源一起失控。本文从无界提交开始,逐步改成固定 worker、有限队列、可观测的拒绝策略和可等待的优雅停机。439 收藏 -
Go 处理大文件上传时,不要直接把请求体读进内存。本文用临时文件串起流式写入、大小校验、SHA-256 校验和原子替换,说明每一步为什么存在,以及失败时怎样清理。335 收藏