Go问答技术文章
-
Golang · Go问答 | 2天前 | go · Context · 并发编程 · 接口超时 · 超时控制 goroutine泄漏 WithTimeout Go context Go问答 CancelFunc
从接口超时、下游取消和 goroutine 泄漏治理角度,解释 Go context 的使用价值、风险边界、采用路径和观察指标。477 收藏 -
Golang · Go问答 | 4天前 | go语言 · HTTP客户端 · Go问答 · 连接复用 · 排查清单 · net/http 连接复用 HTTP响应体 Go问答 resp.Body.Close 排查清单
本文从 Go HTTP 客户端连接数上涨的现象出发,按代码、连接池和日志三层检查响应体是否读完并关闭,给出修复写法、反向验证和上线清单。452 收藏 -
围绕 Go 文件下载接口的路径穿越风险,解释 filepath.Clean 为什么不等于安全校验,并给出安全根目录、相对路径判断、扩展名白名单、审计日志和验证用例。445 收藏 -
Golang · Go问答 | 1天前 | 并发 · channel · select · 性能排查 · Go问答 · select Go channel context default CPU飙高 忙等循环 ticker
Go select 里的 default 会在没有 channel 就绪时立即返回;如果外层套着无限 for,就会形成忙等循环,让 CPU 空转。更稳的写法是阻塞等待、用 ticker 控制检查频率,并用 context 处理退出。438 收藏 -
围绕 Go defer 在循环中的常见误用,解释为什么文件、连接、锁等资源会等到函数返回才释放,并给出函数拆分、显式关闭和错误处理的实战写法。418 收藏 -
回答 Go 接口跨域时 OPTIONS 预检请求为什么会返回 404,给出标准库 http 中间件的最小写法、带路由框架时的变体、常见响应头坑点和发布前检查清单。388 收藏 -
Golang · Go问答 | 2天前 | Timer · 性能优化 · time.After · Go问答 · Go 内存优化 Timer time.After Go问答 time.NewTimer Go1.23
解释 Go time.After 在循环里的资源占用问题,区分 Go 1.23 前后的 Timer 语义变化,并给出 time.After、time.NewTimer、Stop 和 Reset 的工程选择建议。384 收藏 -
Golang · Go问答 | 2星期前 | map · RWMutex · sync.Map · go并发 · Go问答 · Go channel map 并发读写 Fatal error RWMutex sync.Map
本文用完整工作流回答 Go map 并发读写为什么会崩:先复现 fatal error 和 data race,再定位共享 map,最后按场景选择 RWMutex、sync.Map 或 channel 收口,并给出上线前检查清单。379 收藏 -
Golang · Go问答 | 1天前 | channel · 并发编程 · Go问答 · 背压 · 容量规划 · Goroutine channel 缓冲区 背压 Go问答 buffered channel 并发容量
Go channel 缓冲区不是越大越好。容量越大只能延后阻塞,不能提升消费者处理能力;高并发场景要按到达速率、处理耗时、可接受延迟和背压策略一起定。377 收藏 -
本文用问答方式解释 Go map 并发读写为什么会 panic,并给出从场景判断、锁保护、sync.Map、channel 单写到压测检查的完整选型流程。368 收藏 -
Golang · Go问答 | 1天前 | pprof · trace · 性能排查 · Go问答 · 服务安全 · Go pprof 生产环境 trace 安全入口 net/http/pprof 性能排障
Go 服务不建议把 /debug/pprof/ 直接暴露到公网。pprof 和 trace 能帮助排障,也可能暴露运行时细节;更稳的做法是本机或内网采集、加鉴权、短时开启并留下操作记录。349 收藏 -
本文回答 Go range 循环变量取地址为什么容易踩坑:旧语义下多个指针可能指向同一个循环变量,Go 1.22 后每轮变量语义改变,但如果目标是修改原切片元素,仍应使用索引取址。319 收藏 -
本文解释 Go for range 中 goroutine 打印错值的问题,区分 Go 1.22 新循环变量语义和旧模块行为,并给出版本检查、代码排查、兼容写法和验证清单。315 收藏 -
Golang · Go问答 | 1天前 | JSON · time.Time · 接口设计 · Go问答 · encoding/json · encoding/json API响应 JSON序列化 time.Time omitempty Go问答 omitzero
Go 里 time.Time 是结构体零值,旧的 omitempty 不会按很多人期待的方式省略它。Go 1.24 起可用 omitzero;需要区分缺失和有值时,用 *time.Time 更清楚。315 收藏 -
Golang · Go问答 | 6天前 | JSON · 接口设计 · Go问答 · nil slice · Go 接口兼容 json.Marshal nil slice empty slice 数组字段
回答 Go nil slice 和空 slice 在 JSON 输出上的差异,说明为什么一个是 null、一个是 [],并给出接口数组字段统一成 [] 的代码写法、回归检查和迁移清单。305 收藏