Go问答技术文章
-
Go sync.Pool 的 Get 不保证返回刚 Put 的对象,池内元素也可能被自动移除。本文用最小代码说明 Get、Put、New 的边界,并给出复用临时对象时的排查清单。336 收藏 -
Go 处理大文件上传时,不要直接把请求体读进内存。本文用临时文件串起流式写入、大小校验、SHA-256 校验和原子替换,说明每一步为什么存在,以及失败时怎样清理。335 收藏 -
Go 服务接入 OpenTelemetry 后,如果 Trace 仍然无法显示清晰的调用关系,通常要从 service.name、HTTP 入出站埋点、上下文传播和批量导出四个边界排查。本文给出一套原创接入思路。335 收藏 -
bytes.Buffer.Reset 会清空可读数据,却保留底层存储。本文用容量、切片别名和并发边界说明复用何时有益、何时会让大块内存长期驻留。334 收藏 -
Go 的 crypto/cipher.NewGCMWithRandomNonce 会为每次 Seal 自动生成 12 字节 nonce,并把 nonce 放在返回密文的最前面。本文用同一个 AES-GCM 示例核对密文布局、Open 的切片方式、附加数据校验和旧代码迁移边界。334 收藏 -
Go JSON 指针字段设为 nil 后仍输出,通常是因为标签没有 omitempty,nil 会被编码为 null。本文从最小结构体、标签检查、接口契约和自定义 MarshalJSON 四个方向定位原因。334 收藏 -
sql.Conn.Raw 能让 Go 程序临时访问驱动连接,但回调结束后 database/sql 只根据返回错误判断连接是否还能用。本文解释修改驱动状态后的复用风险,以及何时应返回 driver.ErrBadConn。334 收藏 -
cgo 返回的 C 指针并非一律不能保存到 Go。本文区分 Go pointer 与 C pointer,说明 unsafe.Pointer 的持有边界、C.free 释放责任,以及 cgocheck 报错的排查方法。334 收藏 -
Go archive/zip 的 Writer.Copy 用于原始条目复制,不负责重建文件头。本文解释 Copy、CreateRaw 与 CreateHeader 的边界,并给出修改 ZIP 元数据和重新压缩内容的实现方式。334 收藏 -
复盘 Go TLS 会话恢复仍走完整握手的常见根因,重点检查客户端缓存、TLS 1.3 会话票据读取、缓存键与多实例票据密钥。334 收藏 -
Go 从 channel 接收时,关闭后的读取会立刻返回元素类型的零值。本文用订单事件场景说明如何用第二个返回值 ok 区分真实数据、关闭信号与业务结束条件,并给出可复查的写法。333 收藏 -
环境变量里的布尔值并不只有 true 和 false。本文用 strconv.ParseBool 拆开可接受字面量、空值默认、错误回滚和配置热更新边界,给出一套不会把拼写错误静默当成关闭的 Go 配置写法。333 收藏 -
Go 泛型约束里的类型集和方法集不是一回事。本文用 Number、Stringer、Format 三个真实标识符说明为什么 T 不能随意调用方法,以及如何选择收窄约束、显式转换或交给 fmt 处理。333 收藏 -
Go 的 //go:embed glob 没有匹配文件时会在构建阶段直接失败。本文从包目录、路径模式、单文件与 embed.FS 的差异出发,给出补文件、改路径和最小复查方法。333 收藏 -
ErrWaitDelay 通常表示命令已成功退出,但 os/exec 管理的 I/O 管道在 WaitDelay 内仍未关闭。本文解释计时起点、后代进程继承描述符的常见原因、错误优先级和可落地的修复方式。333 收藏