Go问答技术文章
-
解释Go snowflake修改Epoch后旧编号时间偏移的原因,区分Node生成状态与全局解码配置,并给出显式历史格式解码器和保留纪元、分版本迁移的方案。135 收藏 -
Go 的 encoding/csv 会按引号状态判断记录边界。本文用多行字段示例说明怎样保留引号内换行,并给出字段数检查、脏数据容错和大文件逐条读取的取舍。135 收藏 -
Go 升级后 context.Cause 返回值变化,先不要把它当成标准库回归。应按构造函数、首次取消时机、父子 Context 和错误身份四层排查,区分 ctx.Err 的取消状态与 Cause 的具体原因。135 收藏 -
image.NRGBA 保存非预乘8位分量,但 RGBA 方法返回16位预乘值。对照 color.NRGBA、color.RGBA、Set 与 SetNRGBA,解释半透明像素数值变化、原始读取及透明边界。135 收藏 -
Go 的 tls.Config 默认禁止 TLS 重协商。本文从旧客户端兼容场景出发,解释 Renegotiation 的三个取值、TLS 1.2 与 TLS 1.3 的边界,以及如何用握手错误和 ConnectionState 判断拒绝原因。135 收藏 -
os.File.Sync 成功只覆盖当前文件内容提交到 stable storage 的边界,不等于用户态缓冲、目录项和业务 checkpoint 一起持久化。本文用可复用缓冲区、明确 Flush/Sync 顺序和临时文件替换边界说明批处理如何减少额外分配并降低重启后的丢数风险。135 收藏 -
Go 项目出现 vendor inconsistent 时,通常是 go.mod、vendor/modules.txt 或 go.work 与 vendor 目录不同步。本文按单模块和 workspace 两种情况给出恢复命令,并解释 replace、显式依赖和 -mod 选择。134 收藏 -
Go fmt.Errorf 多个 %w 可保留多个错误原因。结合处理与清理失败场景说明 nil 组合、错误树、errors.Unwrap 的限制,以及分类与兼容性取舍。134 收藏 -
Go 的默认 JSON 解码会忽略结构体没有声明的字段。本文用 DisallowUnknownFields 让未知字段直接返回错误,并说明错误处理、兼容期和嵌套结构的边界。134 收藏 -
Zap 默认按时间窗口内的日志等级和消息进行采样分组,request_id、用户和延迟等字段只是上下文。本文解释这种设计如何避免高基数字段打散采样,并说明 first、thereafter 与独立 Core 的使用边界。134 收藏 -
slices.Delete 不负责缩小底层数组或关闭文件等资源。本文区分返回值、Go 1.22 起的尾部清零、容器复制、其他引用与 Close 所有权,给出可选收缩的原创示例。134 收藏 -
在 Go 的 select 中,把某个分支使用的局部 channel 变量设为 nil,就能让这个通信 case 暂时不可用;恢复为真实 channel 后分支重新参与选择。本文比较 nil、关闭 channel 和 default 的语义与使用边界。133 收藏 -
sync.Map.LoadAndDelete 同时完成读取和删除,真正判断键是否存在要看 loaded,而不能只看 value 是否为 nil。本文用一个可运行的小场景拆开返回值、并发语义和常见误判。133 收藏 -
Go html/template 自动转义后页面显示异常时,不要直接关闭转义。本文从文本、属性、URL 和可信内容边界入手,给出最小排查、修复与复查方法。133 收藏 -
Go 1.23 不能直接 range 结构体,但可以让结构体方法返回 iter.Seq 或 iter.Seq2,再用 range over function 逐项迭代。本文用完整示例说明 yield、提前停止、双值迭代器与 go.mod 版本要求。133 收藏