Documentation
¶
Overview ¶
Package encoding 提供常用的编码和哈希工具函数。
当前能力:JSON 编解码包装(MarshalJSON/UnmarshalJSON 等,UseNumber 语义 有显式入口 UnmarshalUseNumber/UnmarshalFromStringUseNumber——数字保留为 json.Number,防 >2^53 float 精度丢失)、非加密哈希 (Fnv1a64)、加密级摘要(Sha256/Sha256Hex)、Base64(标准/URL 安全, 各含**带填充**与**无填充**两套变体——JWT / OIDC / PKCE 协议段用无填充那套)。
历史说明:曾提供 Md5/Md5Hex/Md5Bytes/Sha1 弱哈希包装,2026-09-15 治理轮 移除(共享 SDK 提供弱哈希入口容易被误用到凭据/签名场景);确有 MD5/SHA-1 合规需求的业务自行使用 crypto 标准库。
Index ¶
- func Base64Decode(s string) (string, error)
- func Base64DecodeBytes(s string) ([]byte, error)
- func Base64Encode(s string) string
- func Base64EncodeBytes(b []byte) string
- func Base64RawDecode(s string) (string, error)
- func Base64RawDecodeBytes(s string) ([]byte, error)
- func Base64RawEncode(s string) string
- func Base64RawEncodeBytes(b []byte) string
- func Base64RawURLDecode(s string) (string, error)
- func Base64RawURLDecodeBytes(s string) ([]byte, error)
- func Base64RawURLEncode(s string) string
- func Base64RawURLEncodeBytes(b []byte) string
- func Base64URLDecode(s string) (string, error)
- func Base64URLEncode(s string) string
- func Fnv1a64(data []byte) uint64
- func Marshal(v any) ([]byte, error)
- func MarshalIndent(v any, prefix, indent string) ([]byte, error)
- func MarshalToString(v any) (string, error)
- func Sha256(str string) string
- func Sha256Hex(data []byte) string
- func Unmarshal(data []byte, v any) error
- func UnmarshalFromReader(reader io.Reader, v any) error
- func UnmarshalFromString(str string, v any) error
- func UnmarshalFromStringUseNumber(s string, v any) error
- func UnmarshalUseNumber(b []byte, v any) error
- func Valid(data []byte) bool
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Base64Decode ¶
Base64Decode 解码 Base64 编码的字符串。
⚠️ 本方法是**带填充**变体(base64.StdEncoding)——输入必须带 '=' 填充。 JWT / OIDC / PKCE 协议段(无填充)请用 Base64RawDecode:拿本方法解无填充串 会报 "illegal base64 data at input byte N"。
func Base64DecodeBytes ¶ added in v0.14.0
Base64DecodeBytes 解码 Base64 为原始字节(pkg#12)。 base64 本质是字节↔字节编码——结果按字节使用(凭据还原/图片/PEM DER 等) 用本方法从类型层面表达意图;Base64Decode 返回 string,供结果按文本处理的 场景,字节场景经它中转会引入一次多余拷贝且编译器无法发现误用。
⚠️ 带填充变体;无填充请用 Base64RawDecodeBytes。
func Base64Encode ¶
Base64Encode 返回字符串的 Base64 编码。
⚠️ 本方法是**带填充**变体(base64.StdEncoding,末尾补 '=')——与 stdlib 默认 口径一致。JWT / OIDC / PKCE 协议段用的是**无填充**变体,请用 Base64RawEncode。
func Base64EncodeBytes ¶ added in v0.14.0
Base64EncodeBytes 返回字节切片的 Base64 编码(字节→字节方向的免拷贝入口)。
⚠️ 带填充变体;无填充请用 Base64RawEncodeBytes。
func Base64RawDecode ¶ added in v0.25.1
Base64RawDecode 解码 Base64 编码的字符串(**无填充**变体,base64.RawStdEncoding)。
与 Base64Decode 的差别只有一处:输入不带 '=' 填充——JWT / OIDC / PKCE 协议段 正是这个形态(RFC 7515 §2:base64url 编码时省略 '=' 填充)。
func Base64RawDecodeBytes ¶ added in v0.25.1
Base64RawDecodeBytes 解码 Base64 为原始字节(**无填充**变体, base64.RawStdEncoding)。与 Base64DecodeBytes 的差别只有一处:输入不带 '=' 填充。
func Base64RawEncode ¶ added in v0.25.1
Base64RawEncode 返回字符串的 Base64 编码(**无填充**变体,base64.RawStdEncoding)。
与 Base64Encode 的差别只有一处:末尾不补 '='。命名与 stdlib 对齐 (base64.RawStdEncoding)。
func Base64RawEncodeBytes ¶ added in v0.25.1
Base64RawEncodeBytes 返回字节切片的 Base64 编码(**无填充**变体, base64.RawStdEncoding;字节→字节方向的免拷贝入口)。
func Base64RawURLDecode ¶ added in v0.25.1
Base64RawURLDecode 解码 Base64 URL 安全编码的字符串(**无填充**变体, base64.RawURLEncoding)。
与 Base64URLDecode 的差别只有一处:输入不带 '=' 填充——JWT / OIDC / PKCE 协议段正是这个形态。拿带填充的 Base64URLDecode 解它会报 "illegal base64 data at input byte N"。
func Base64RawURLDecodeBytes ¶ added in v0.26.0
Base64RawURLDecodeBytes 解码 Base64 URL 安全编码为原始字节(**无填充**变体, base64.RawURLEncoding)。
与 Base64RawURLDecode 的差别只有一处:出参是字节切片——结果按字节使用的场景 (凭据还原 / PEM DER / 签名原文比对)不必再转一次 string,也不必担心把二进制 塞进 string 时的不可见字符问题(pkg#105)。
func Base64RawURLEncode ¶ added in v0.25.1
Base64RawURLEncode 返回字符串的 Base64 URL 安全编码(**无填充**变体, base64.RawURLEncoding)。
与 Base64URLEncode 的差别只有一处:末尾不补 '='。这是 JWT / OIDC / PKCE 协议段的实际形态——base64url 的填充字符 '=' 在协议里不允许出现 (RFC 7515 §2)。
func Base64RawURLEncodeBytes ¶ added in v0.26.0
Base64RawURLEncodeBytes 返回字节切片的 Base64 URL 安全编码(**无填充**变体, base64.RawURLEncoding;字节→字节方向的免拷贝入口)。
与 Base64RawURLEncode 的差别只有一处:入参是字节切片,不经一次 string↔[]byte 拷贝。JWT / OIDC / PKCE 协议段的原文常以 []byte 形态在手 (签名校验、密钥材料),走字节入口省掉一次拷贝(pkg#105)。
func Base64URLDecode ¶
Base64URLDecode 解码 Base64 URL 安全编码的字符串。
⚠️ 本方法是**带填充**变体(base64.URLEncoding)——输入必须带 '=' 填充。 JWT / OIDC / PKCE 协议段(无填充)请用 Base64RawURLDecode:拿本方法解无填充串 会报 "illegal base64 data at input byte N"。
func Base64URLEncode ¶
Base64URLEncode 返回字符串的 Base64 URL 安全编码。
⚠️ 本方法是**带填充**变体(base64.URLEncoding,末尾补 '=')——与 stdlib 默认 口径一致。JWT / OIDC / PKCE 协议段用的是**无填充**变体,请用 Base64RawURLEncode。
func Fnv1a64 ¶
Fnv1a64 返回数据的 64 位 FNV-1a 哈希值(非加密哈希,用于缓存分片/内容粗校验)。 跨服务持久化过哈希值的场景请勿更改算法假设(历史名 Hash,2026-09 改为如实命名)。
func MarshalIndent ¶
MarshalIndent 将 v 序列化为带缩进的 JSON 字节。
func MarshalToString ¶
MarshalToString 将 v 序列化为 JSON 字符串。
func Sha256Hex ¶
Sha256Hex 返回数据的 SHA-256 十六进制字符串。 适用于内容校验和、缓存键等非加密签名场景(2026-09-15 治理轮: 移除 Md5/Md5Hex/Md5Bytes/Sha1 包装——共享 SDK 提供弱哈希入口容易被 误用到凭据/签名场景;确有 MD5/SHA-1 合规需求的业务自行引 crypto 标准库)。
func Unmarshal ¶
Unmarshal 将 JSON 字节反序列化到 v。 使用 UseNumber 模式解析数字,避免精度丢失。 与 encoding/json.Unmarshal 语义一致:整个输入必须是单一 JSON 值, 尾部残留数据(截断修复失败/拼接脏数据)视为错误而非静默忽略。
func UnmarshalFromReader ¶
UnmarshalFromReader 从 Reader 读取 JSON 并反序列化到 v。
func UnmarshalFromString ¶
UnmarshalFromString 将 JSON 字符串反序列化到 v。 语义同 Unmarshal:尾部残留数据视为错误。
func UnmarshalFromStringUseNumber ¶ added in v0.3.0
UnmarshalFromStringUseNumber 将 JSON 字符串反序列化到 v。 语义同 UnmarshalUseNumber:数字保留为 json.Number,防 >2^53 精度丢失。
func UnmarshalUseNumber ¶ added in v0.3.0
UnmarshalUseNumber 将 JSON 字节反序列化到 v,数字显式解析为 json.Number (而非 float64)。js 数值只有 53 位整数精度,金额/雪花 ID 等 >2^53 的整数 经 float64 中转会静默丢失精度;json.Number 保留原文字面量,由业务按需 转 int64/string。目标字段为 any 时生效最明显;已声明类型的字段仍按 该类型解析。尾部残留数据视为错误(同 Unmarshal)。
Types ¶
This section is empty.