Go问答技术文章
-
Go 时间格式化与本地时区不同,通常来自时间值 Location、输入解析语义或部署环境差异。通过显式加载业务时区、使用 In、区分 ParseInLocation 与展示转换,并为容器提供时区数据,避免固定加小时造成错误。292 收藏 -
Go 中格式化时间字符串适合展示,不适合作为通用的先后判断依据。本文用跨月份、时区和精度的例子说明字符串比较为什么会误判,并给出基于 time.Time、Before、After、Equal 与 Compare 的稳妥写法。177 收藏 -
Golang · Go问答 | 23小时前 | 超时 · go · HTTP服务 · net/http · Go net/http ResponseController SetReadDeadline 请求体超时
Go HTTP 服务端要限制慢请求的读取时间,可以用 ResponseController.SetReadDeadline 设置整次请求读取的截止时间。它覆盖请求体读取,零值表示取消 deadline,已经过期后不能靠重新设置更晚时间延长;还要区分 ResponseWriter 不支持该能力与请求本身读取超时。112 收藏 -
在 Go 的 MarshalJSON 中复用默认结构体编码时,使用不带方法的新定义类型切断递归;本文给出安全写法、扩展字段方式,以及真别名和指针接收者的边界。460 收藏 -
Golang · Go问答 | 23小时前 | 并发 · map · Mutex · go · Go sync.Map sync.Mutex concurrent map writes map 并发写入
Go map 并发写入可能直接触发 concurrent map writes。本文从只读与更新边界讲起,解释不同键为什么仍不安全,再对比 mutex、RWMutex、单 goroutine 所有权和 sync.Map 的适用场景,并用竞态检测器做回归检查。471 收藏 -
Go 的 atomic 操作只为原子访问提供同步语义,同一共享变量若再混用普通读写,仍可能产生数据竞争。本文按资产、攻击路径、防护控制和验证清单说明统一访问策略。395 收藏 -
Go sync.Map.CompareAndSwap 返回 false 时,先用 Load 区分键不存在、值类型不符和旧值不一致,再把 CAS 失败视为并发竞争信号;不要把一次读取结果直接当作更新成功保证。388 收藏 -
Go race 检测器报告 map 并发读写时,先从两条访问栈确认共享对象和冲突类型,再用 go test -race 稳定复现,最后按访问模型选择 sync.RWMutex、单写者 channel 或不可变快照,避免只把一处读写临时包进锁里。299 收藏 -
Go sync.Cond 的 Signal 不会替等待者保存一条通知。要避免看似错过唤醒,必须用同一把锁保护共享条件和 Wait,并在 for 循环中重新检查条件;再根据唤醒一个还是全部等待者选择 Signal 或 Broadcast。391 收藏 -
Golang · Go问答 | 1天前 | 并发 · channel · select · goroutine · go · go并发通信 Go channel发送阻塞 channel缓冲区满 select非阻塞发送
Go channel 是否会阻塞,关键看发送时有没有匹配接收者,或有缓冲 channel 是否仍有空位。本文区分 nil、无缓冲、有缓冲和已关闭 channel,并用 select 写出可控的非阻塞发送。491 收藏 -
Golang · Go问答 | 1天前 | 数据库 · Context · 后端开发 · Go问答 · Go 连接池 context database/sql 数据库超时 QueryContext 驱动取消
Go context 超时后数据库查询仍未结束,通常要沿着 QueryContext、数据库驱动、Rows 读取和连接池逐层排查。本文给出最小写法、驱动取消边界、资源释放和连接池诊断方案。355 收藏 -
Go 服务中的 goroutine 数量持续增长,不要先猜是哪一行代码泄漏。先观察数量趋势,再用 goroutine profile 对比重复堆栈,沿着 channel、定时器、网络调用和 context 的生命周期找到没有退出条件的工作函数。200 收藏 -
Go http.Server.Shutdown 会先关闭监听器和空闲连接,再等待活动请求结束;长请求、无超时下游和 hijack 长连接会让关闭看起来挂起。本文用一个小型服务说明连接边界、退出预算与排查方法。366 收藏 -
Go 服务启动时报端口被占用时,从 net.Listen 的绑定地址入手,结合 macOS、Linux、Windows 命令定位 PID 和监听范围,区分旧实例、IPv4/IPv6 与通配地址冲突,并给出安全停止、改端口和复查方法。172 收藏 -
Go HTTP 连接未复用先查响应体读取关闭与共享 Transport。通过有限响应体封装和 httptrace 说明 HTTP/1.x、HTTP/2、取消及连接池边界,避免把 Close 或延迟变化当作复用保证。165 收藏