Go问答技术文章
-
Go time.Parse 解析不带时区的字符串时会按 UTC 解释。本文从现象出发,说明何时使用 ParseInLocation、何时使用 In,并补充 IANA 时区、夏令时和错误处理的边界。329 收藏 -
Golang · Go问答 | 10小时前 | 标准库 · 错误处理 · go · 并发控制 · Go context cause 取消原因 WithCancelCause CancelCauseFunc
Go 1.20 起可以用 context.WithCancelCause 保存具体取消原因,再用 context.Cause 读取;本文区分 ctx.Err 的通用状态与 Cause 的诊断信息,并说明父子 context 的首次取消、nil cause 和超时 cause 边界。125 收藏 -
errors.Join合并错误后,应通过errors.Is匹配目标哨兵。本文用完整清单检查示例演示保留%w包装、合并独立问题和同时提示多个类别,并解释同文案错误、nil、Unwrap与As的边界。175 收藏 -
Go context deadline exceeded 只能说明当前上下文因截止时间结束,不能直接定位来源。本文用 WithTimeoutCause、context.Cause 和 errors.Is 区分本地总预算、上游阶段预算与更上层请求超时。243 收藏 -
sync.Cond.Signal 不会保存没有等待者时发出的通知,真正应该持久化的是 ready、队列长度或关闭状态等共享条件。本文用同一把 Locker 保护条件读写,说明如何用 for 设计不会因 Signal 先到而永久等待的等待协议。310 收藏 -
sync.Once 的回调函数内部再次调用同一个 Once.Do 时不会被当作已完成调用,而是等待当前回调结束,因此会卡在同一把互斥锁上。本文拆解死锁原因并给出不重入的初始化写法。156 收藏 -
RWMutex写入等待需要结合同锁实例、读锁持有范围和采样证据定位。本文提供可控制释放的并发示例,区分等待与持有时间,并解释block/mutex profile、嵌套读锁、锁升级与缩小临界区的注意事项。372 收藏 -
sync.Map.LoadOrStore 只能保证同一个键最终保存一个值,不能阻止传入参数在调用前被多个 goroutine 重复构造。本文用每个键一个 sync.Once 的初始化条目,说明怎样让昂贵初始化只执行一次,并覆盖失败缓存、删除重试与排查边界。207 收藏 -
Go sync.Pool 只适合复用可丢弃的临时对象。本文说明 Get 后如何建立初始状态、Put 前如何清理切片和引用,并用 defer 覆盖错误路径,避免旧数据带入下一次使用。463 收藏 -
Go multipart.Part.FileName 读取的是 Content-Disposition 中的 filename 参数。普通表单字段没有这个参数时返回空字符串,文件分段带空 filename 时也可能为空;如果有文件名,Go 还会用 filepath.Base 处理后再返回。464 收藏 -
Go 的 hash/crc32.ChecksumIEEE 会按 IEEE 多项式对传入的字节序列计算 32 位循环冗余校验。本文说明校验范围、分段读取、结果比较和算法兼容边界,帮助你避免把字段遗漏、结果格式或 CRC32 的用途理解错。277 收藏 -
sync.Cond.Wait 返回只代表当前 goroutine 被唤醒并重新拿到 Locker,不代表共享条件仍然成立。本文从解锁、唤醒、重新加锁三个状态说明为什么必须用 for 循环检查条件,并给出条件读写、Signal 与排障边界。359 收藏 -
Go select 的 case 中无标签 break 只会结束最近的 select,不会自动结束外层 for。本文用控制流示例说明 break、break LOOP、continue 和 return 的目标差异,以及如何安全停止外层轮询。181 收藏 -
math.Frexp返回归一化分数与二进制指数,math.Ldexp可重组这对参数。本文提供最小Go示例,解释分数区间、负数与倍率调整,并列出零、无穷和NaN的特殊约定,避免与十进制表示或原始位字段混淆。426 收藏 -
Go 1.22 改变了 for 循环变量的创建方式,但循环外变量、旧模块和延迟回调仍可能共享同一个值。本文说明闭包捕获边界,并给出显式传值和当前值副本的稳妥写法。392 收藏