Go问答技术文章
-
Go HTTP 服务端选择 ReadHeaderTimeout 还是 ReadTimeout,关键看是否要限制请求体的整体读取时间。本文按请求阶段、接口类型和回归场景拆开比较,并给出从整请求超时迁移到分层配置的清单。120 收藏 -
Golang · Go问答 | 1个月前 | 连接池 · 性能排查 · HTTP客户端 · Go问答 · Go net/http Transport HTTP连接复用 DisableKeepAlives TCP keepalive
Go 的 Transport.DisableKeepAlives 控制 HTTP keep-alive 与连接复用,不等于 TCP keepalive。本文用请求序列、连接池边界和可观察代码说明关闭后的影响,以及适合关闭和保持默认值的场景。115 收藏 -
http.Client.Timeout 限制的是一次请求从连接到读取响应体的总时长,不会替调用方管理 Response.Body。本文区分 Close、读到 EOF、连接复用和慢流场景,给出可直接套用的清理写法。352 收藏 -
Go HTTP 请求取消后,Transport 如何处理连接、请求体、响应体和错误?本文按 RoundTrip 的实际边界解释 context.Canceled、超时与连接复用。150 收藏 -
time.Now 返回的时间可能同时包含墙上时钟和单调时钟,但 time.Time.Round 是墙上时间计算,会从结果中剥离单调读数。本文按比较、耗时、序列化和 map key 场景说明怎么判断与修复。397 收藏 -
time.AfterFunc 的 Timer.Reset 返回 false,只说明旧定时器已经到期或停止,不代表旧回调已经结束。本文用 started/finished 信号说明如何判断旧回调状态,并避免新旧回调并发访问共享数据。297 收藏 -
Go 的 time.Ticker 不是保存每次节拍的事件队列。本文解释接收方变慢时 tick 为什么会被丢弃,并给出按时间补偿、计数和可靠事件记录的选择方法。455 收藏 -
解释 Go 的 time.AfterFunc 中 Timer.Stop 返回 false 的准确含义,区分回调已启动与已完成,并给出用 started、done channel 显式协调的安全写法。235 收藏 -
context.WithoutCancel 会保留父级值访问,却主动切断 Deadline、Done、Err 和 Cause。本文用最小示例说明原因,并给出后台任务重新建立独立超时的写法。305 收藏 -
Golang · Go问答 | 1个月前 | 超时 · 错误处理 · go · Context · Go context.Err context.DeadlineExceeded context.WithDeadline context.Canceled
Go context.WithDeadline 提前调用 cancel 时,ctx.Err() 返回 context.Canceled;只有 deadline 先到期才返回 context.DeadlineExceeded。本文用可复现代码区分主动取消、父级取消和真正超时。453 收藏 -
Golang · Go问答 | 1个月前 | go · Context · Go问答 · context.Cause Go context.WithCancelCause CancelCauseFunc Go 上下文取消原因 Go 下游读取取消原因
讲清 Go context.WithCancelCause 返回的 CancelCauseFunc 如何把具体错误传给下游,以及 context.Cause 与 ctx.Err 的区别、取消顺序和资源清理边界。338 收藏 -
goroutine 返回不会自动通知其他等待者。本文对比 close(done)、sync.Cond.Broadcast 和 sync.WaitGroup,说明如何发布终态、保护共享状态并避免等待者永久阻塞。188 收藏 -
说明 Go for-range channel 为什么依赖 close 才能结束,拆解零值与关闭状态的区别、关闭责任、重复 close 风险和测试检查方法。316 收藏 -
Golang · Go问答 | 1个月前 | channel · select · go · 并发控制 · Go select nil channel Go 动态禁用 select 分支 Go channel 状态控制 Go select 关闭频道
Go select 不能直接删除 case,但可以把参与选择的频道变量设为 nil 来动态禁用分支。本文用一个单值转发循环说明输入、输出、关闭频道和 default 的边界。473 收藏 -
解释 Go select 多个通信同时就绪时为什么不能依赖 case 顺序,区分源码求值、伪随机选择、default 和显式优先级策略。198 收藏