Go问答技术文章
-
Go encoding/json 默认解码会让 JSON 缺失字段、null 和零值在部分类型上落到相同结果。本文用指针、json.RawMessage 和自定义包装类型,逐步保留字段存在性、null 状态与有效零值。138 收藏 -
Go 使用 defer 和 recover 隔离一次 panic 时,还应在恢复现场调用 runtime/debug.Stack 保存调用堆栈。本文给出统一错误返回、日志上下文和 goroutine 边界的写法。138 收藏 -
Go io.CopyN 复制固定长度时,应同时比较 written 与 n,并用 errors.Is 区分源数据提前结束和其他 I/O 错误。本文给出返回契约、可复用判断函数及固定长度协议的处理边界。138 收藏 -
Go reflect.Value.Set 报错通常不是 Set 本身随机失败,而是目标 Value 不可设置、只拿到了值副本、字段未导出或类型不匹配。本文按 CanSet、指针解引用、字段导出和类型检查拆开定位,并给出返回 error 的安全封装。138 收藏 -
区分Go Timer Reset的新旧通道语义、兼容设置与已投递业务事件,给出单拥有者处理方式和时间观察样例,解释Reset布尔值、旧通知清理及AfterFunc回调边界。137 收藏 -
Golang · Go问答 | 2天前 | 连接池 · 性能排查 · HTTP客户端 · Go问答 · Go net/http 连接复用 Transport MaxIdleConnsPerHost MaxConnsPerHost
说明 Go net/http Transport 的空闲连接池如何工作,区分 MaxIdleConnsPerHost、MaxConnsPerHost 与 IdleConnTimeout,给出共享 Transport 和 ClientTrace 的排查示例。137 收藏 -
用 Go 的 xml.Decoder.Token 解析 XML 时,Space 保存的是命名空间 URL 而不是短前缀。本文用流式示例说明 Space 与 Local 的正确匹配方式,并排查默认命名空间、未声明前缀和 RawToken 的常见差异。137 收藏 -
Go 的 cipher.AEAD.Open 只有在认证成功时才可以使用返回明文。本文用一个小实验说明错误 AAD、错误密文和原地解密时的缓冲区边界,并给出统一返回 nil 的安全封装。137 收藏 -
Go 的 interface 类型可以比较,但其中保存的动态值不一定可比较。本文从 panic 现场解释 slice、map、func 等类型为何触发运行时错误,并给出 reflect.Value.Comparable、类型断言和业务键比较的安全方案。136 收藏 -
Go LDAP 中 EscapeFilter 面向 RFC4515 过滤器值,EscapeDN 面向 RFC4514 的 DN 属性值。本文用一个小查询项目说明两者的字符边界、组装方式与排错规则。136 收藏 -
Go 切片的 append 是否改写原数据取决于容量和底层数组共享关系。本文结合 slices.Clone 说明如何建立独立写入副本,以及浅复制、nil 和空切片的边界。136 收藏 -
Go sqlmock 适合锁定 SQL 调用、参数和事务契约,真实数据库测试则负责发现方言、模式、约束、索引与事务环境问题。本文用一张边界表说明两者各自能发现什么,以及如何组合回归。135 收藏 -
Go 的 os.ProcessState.SysUsage 返回平台相关的资源使用对象,不同系统的底层类型和字段语义并不完全相同。本文从 ProcessState 的生命周期、类型观察、平台适配和生产日志四个方面说明如何安全使用。135 收藏 -
Go x/net/http2/hpack.Decoder 的输入是压缩后的 HPACK 头部块,解压后的名称和值可能更长。本文说明 SetMaxStringLength 的限制对象、ErrStringLength 的处理方式,以及增量 Write 与 Close 的生命周期边界。135 收藏 -
go-message 写邮件时,附件 WriteCloser 与外层 Writer.Close 不是同一层职责。本文从 multipart/mixed、传输编码和 MIME 终止边界解释关闭顺序,并给出可处理写入与收尾错误的 Go 示例。135 收藏