Go问答技术文章
-
Golang · Go问答 | 4星期前 | goroutine · Context · 并发编程 · 故障排查 · Go问答 · channel WaitGroup Go context ctx.Done 阻塞排查 context.Canceled
Context 取消只会关闭 Done 通道,不会自动打断 channel 收发、WaitGroup、Mutex、Sleep 或不支持 Context 的 I/O。本文按取消链、阻塞点和下游 API 三层给出排查与修复方法。144 收藏 -
Golang · Go问答 | 4星期前 | channel · golang · select · 并发编程 · 性能排查 · channel default分支 忙等 time.Ticker context取消 Go select
本文解释 Go select 的 default 分支为何会把阻塞等待变成高频轮询,并分别给出移除 default、加入 Context、使用 Ticker、封装单次非阻塞尝试及处理关闭通道的改法。465 收藏 -
无缓冲 Channel 强调发送与接收的同步交接,有缓冲 Channel 用有限队列吸收生产者和消费者的短时速率差异。本文从阻塞条件、业务语义、容量估算、关闭责任和取消路径说明如何做选择。421 收藏 -
Golang · Go问答 | 4星期前 | channel · panic · 并发编程 · Go问答 · 并发安全 go channel关闭 send on closed channel Golang panic Channel关闭权 多生产者
向已关闭的 Go Channel 发送会触发运行时 panic,因为 close 已声明不会再有新值。本文给出最小复现、单发送者和多发送者安全关闭写法,并说明为什么接收者关闭、isClosed 检查、sync.Once 或 recover 不能替代正确的关闭权设计。156 收藏 -
Go 程序退出前不能靠主函数自然返回来等待后台 goroutine。通过明确关闭输入、WaitGroup 等待和资源所有权,可以确认清理动作完成后再退出。459 收藏 -
Golang · Go问答 | 4星期前 | 并发 · channel · goroutine · go · Context · context 并发限制 工作池 Go channel worker pool Goroutine生命周期
任务总量小且有界时,每任务一个 goroutine 更简单;持续或无界输入、昂贵资源和容量有限的下游,更适合创建前限流或固定工作池。本文给出选择表与可取消实现。458 收藏 -
Golang · Go问答 | 4星期前 | 并发 · goroutine · go · pprof · 故障排查 · goroutine泄漏 并发排查 Goroutine生命周期 Go pprof runtime metrics
Goroutine 持续上涨不等于立刻报错。本文用运行时指标、双时点堆栈快照和退出协议,定位 channel、I/O、ticker 与重试链路中的泄漏入口。458 收藏 -
Go 接口字段既可能缺失,也可能显式传 null。本文说明普通值和单层指针为何不足,并给出 Optional[T] 三态模型、PATCH 更新规则、响应编码方式、失败处理及测试清单。354 收藏 -
Go 的 omitempty 在 encoding/json v1 中不会把值结构体当作空值。本文拆解零值判定规则,并对比指针、omitzero、IsZero 与自定义编码方案。189 收藏 -
json.Unmarshal 解码到 interface{} 或 map[string]any 时,JSON number 默认会落为 float64,可能让大整数标识失去精度。本文对比强类型字段、Decoder.UseNumber 和字符串 ID 三种方案,给出错误处理与安全复查清单。273 收藏 -
Golang · Go问答 | 4星期前 | go · 文件上传 · 流式处理 · 内存优化 · net/http · 流式读取 ParseMultipartForm Go HTTP服务 MaxBytesReader Go大文件上传 MultipartReader
Go 大文件上传内存暴涨,常见原因不是 multipart 本身,而是 io.ReadAll、bytes.Buffer 等整份复制。本文解释 maxMemory 的真实边界,并给出 MaxBytesReader 与 MultipartReader 的流式落盘方案。141 收藏 -
Go 服务收到停机信号后仍有请求进入,通常是监听器尚未关闭或摘流量与停机之间存在窗口。本文用 draining、显式 Listener 和 Server.Shutdown 完整处理。232 收藏 -
Go HTTP Server 的 ReadTimeout、WriteTimeout 和 IdleTimeout 分别约束请求读取、响应写入与 Keep-Alive 等待。本文用可运行配置讲清三者边界,并补充 ReadHeaderTimeout、业务 Context 与流式响应的取舍。128 收藏 -
Go HTTP 请求重试不要一股脑塞进 Transport:网络级可重放失败适合统一处理,创建和写入接口必须由业务层配合幂等键、结果查询与退避策略,才能避免超时后的重复写入。255 收藏 -
Golang · Go问答 | 4星期前 | net/http · Go问答 · 性能边界 · 高并发 连接池 http.Transport Go HTTP客户端 http.DefaultClient
Go 默认 Client 可以被多个 goroutine 并发复用,但并发安全不等于超时与连接池边界适合生产流量。本文区分空闲连接、总连接、请求超时和响应体回收,并给出从默认 Transport 克隆配置的判断方法。151 收藏