Go语言技术文章
-
Go 的 base64.NewDecoder 会缓存不足一个完整量子的数据,等底层流结束后再判断尾部是否完整。本文区分标准填充编码、无填充编码和非法字符的读取结果,给出保留部分输出与判断是否可重试的处理方式。334 收藏 -
Go 使用 encoding/base64.NewEncoder 流式编码时,尾部字符缺失通常是没有关闭编码器,导致不足 3 字节的最后一块仍留在缓冲区。本文说明正确的 Close 顺序、错误处理和验证方法。185 收藏 -
Go 的 net.IP.To4 返回 nil,并不只代表输入一定是非法地址:纯 IPv6 会返回 nil,而 IPv4-mapped IPv6 仍能转换为 4 字节 IPv4。本文用三组输入拆开返回边界,并给出地址族判断、IPNet.Contains 和监听配置中的实用写法。163 收藏 -
Go 的 base64.Decode 可能同时返回已写入字节数 n 和 CorruptInputError。本文说明如何截取有效前缀、定位坏字符,并判断部分结果能否进入业务流程。370 收藏 -
Go 的 base64.StdEncoding 和 base64.RawStdEncoding 使用同一套标准字母表,核心区别是是否保留末尾的 '=' 填充。本文用编码长度、解码配对和协议字段约束说明什么时候选标准编码,什么时候选 Raw 变体。482 收藏 -
Go 的 StdEncoding 会接受部分尾部填充位不规范的 Base64 输入。本文用 Zh== 对比 Zg==,说明 base64.Strict 的拒绝边界、错误处理方式和兼容取舍。149 收藏 -
Go 的 cipher.AEAD.Open 只有在认证成功时才可以使用返回明文。本文用一个小实验说明错误 AAD、错误密文和原地解密时的缓冲区边界,并给出统一返回 nil 的安全封装。137 收藏 -
base64.NewDecoder 返回的是流式 Reader,前几次 Read 成功不代表尾部合法。持续读到终止错误,再用 errors.As 区分 CorruptInputError 与尾部截断;同时保留部分输出但禁止在错误存在时提交完整结果。354 收藏 -
Go 的 Base64 URL 编码要去掉等号填充,直接使用 RawURLEncoding,并让编码器和解码器保持匹配;本文对比填充差异、兼容输入和错误处理。325 收藏 -
Go 的 zlib.NewReaderDict 返回 ErrDictionary 时,通常不是压缩数据本身损坏,而是消费端传入的预置字典与生产端不一致。本文从 FDICT、DICTID、字节来源和读取器复用四个角度给出定位与修复方法。432 收藏 -
Go ascii85.Decode 需要同时看 ndst、nsrc、flush 和 err。本文说明分块读取时如何保留未完成尾块,并在流结束时区分正常短块、单字符截断和非法 ASCII85 字符。392 收藏 -
Go AST 删除或替换节点后,原来的注释不会因为切片变化自动重新归属。本文用 ast.CommentMap 说明 NewCommentMap、Filter 和 Update 的配合方式,避免源码重写时注释残留或漂移。445 收藏 -
Go encoding/asn1 的字段标签不能直接作用于顶层值。本文用 MarshalWithParams 添加 tag:3,explicit,说明显式包装与字段标签的区别,并用对称参数完成编解码和尾部检查。324 收藏 -
协议增加未知 ASN.1 字段时,使用 Go 的 asn1.RawValue 读取完整 TLV,正确区分 Bytes 与 FullBytes,并保留原始字节以便转发或重新编码。257 收藏 -
解释 Go encoding/asn1.Unmarshal 返回的 rest:如何区分顶层多余 DER 数据、连续对象解析,以及 SEQUENCE 内部未映射字段,避免把 err == nil 误判为输入已完全消费。201 收藏