Go语言技术文章
-
Go atomic.Value.Swap 会把新值写入原子容器并返回替换前的值;首次调用返回 nil,但新值不能为 nil,后续调用还必须保持同一具体类型。本文用配置快照场景说明如何安全接住旧值并处理边界。334 收藏 -
io.LimitReader 读到上限后返回 EOF 是设计出来的正常结束信号,不是超限报错。本文从 Reader 契约出发,说明如何用 limit+1 的策略识别输入是否真的超过上限,并比较 LimitReader、ReadFull 与 ReadAtLeast 的适用边界。334 收藏 -
Go xml.Decoder.Strict 默认严格解析 XML。本文说明关闭 Strict 后能兼容哪些常见错误,如何配合 AutoClose 和 Entity 使用,以及为什么字符集、结构和业务字段错误仍要单独处理。334 收藏 -
Go 的 encoding/json 解码到 *T 时,字段缺省和显式 null 都可能得到 nil,单靠指针无法区分。本文用 RawMessage 和泛型 Optional 保存字段是否出现、是否为 null 以及实际值,帮助接口更新和默认值处理避免语义丢失。334 收藏 -
使用 go-ldap 的 ControlPaging 分批读取大型 LDAP 目录,掌握 cookie 续页、连接保持、错误处理和 pageSize 参数边界。334 收藏 -
gojq 能保持大整数精度并进行任意精度整数计算;如果先转成 float64,超过 2^53 的整数可能被舍入。本文给出判断、处理和排查清单。334 收藏 -
Go log/slog 的 ReplaceAttr 可以在属性写入前按字段名和分组路径做遮盖或删除。本文用一个可复用的脱敏函数说明 HandlerOptions 配置、零值 Attr 语义和实际边界。334 收藏 -
Go iter.Pull 把推送式迭代器转换为 next 与 stop 接口,便于按需处理并避免整批中间切片。示例说明提前退出、清理归属与分配收益的适用条件。334 收藏 -
Go 的 base64.NewDecoder 会缓存不足一个完整量子的数据,等底层流结束后再判断尾部是否完整。本文区分标准填充编码、无填充编码和非法字符的读取结果,给出保留部分输出与判断是否可重试的处理方式。334 收藏 -
围绕 Go net/http Server.Shutdown 的等待语义,说明监听器、空闲连接、活动请求和 hijack 连接分别如何处理,并给出带超时 context 的优雅停机写法。334 收藏 -
Go 服务端用 httputil.DumpRequest 调试请求时,body 参数决定是否读取实体;body=true 会把请求体读入内存并恢复 req.Body。本文说明空请求体、前置中间件、大请求和敏感字段的处理边界。334 收藏 -
解释 Go time.Format 与 time.Parse 的参考时间布局,重点说明 01 与 1、02 与 2、03 与 15 的区别,并给出格式不匹配和时区问题的排查方法。334 收藏 -
Go log/slog 可以通过 HandlerOptions.ReplaceAttr 统一删除或改写 time、source 等内置字段。本文说明 groups 的层级边界,并用 TextHandler 与 JSONHandler 解释稳定输出方案。333 收藏 -
Go netip.Prefix.Contains 返回结果异常时,先检查地址族、映射地址、零值和 IPv6 zone,再确认 Prefix 是否有效以及是否需要 Masked 规范化。333 收藏 -
Go io.ReaderAt 适合按偏移读取固定长度记录。本文用偏移公式、完整读取示例和错误表,说明如何处理短读、EOF、溢出和底层 I/O 错误。333 收藏