encoding

package
v0.34.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 4, 2026 License: MIT Imports: 9 Imported by: 0

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

Constants

This section is empty.

Variables

This section is empty.

Functions

func Base64Decode

func Base64Decode(s string) (string, error)

Base64Decode 解码 Base64 编码的字符串。

⚠️ 本方法是**带填充**变体(base64.StdEncoding)——输入必须带 '=' 填充。 JWT / OIDC / PKCE 协议段(无填充)请用 Base64RawDecode:拿本方法解无填充串 会报 "illegal base64 data at input byte N"。

func Base64DecodeBytes added in v0.14.0

func Base64DecodeBytes(s string) ([]byte, error)

Base64DecodeBytes 解码 Base64 为原始字节(pkg#12)。 base64 本质是字节↔字节编码——结果按字节使用(凭据还原/图片/PEM DER 等) 用本方法从类型层面表达意图;Base64Decode 返回 string,供结果按文本处理的 场景,字节场景经它中转会引入一次多余拷贝且编译器无法发现误用。

⚠️ 带填充变体;无填充请用 Base64RawDecodeBytes。

func Base64Encode

func Base64Encode(s string) string

Base64Encode 返回字符串的 Base64 编码。

⚠️ 本方法是**带填充**变体(base64.StdEncoding,末尾补 '=')——与 stdlib 默认 口径一致。JWT / OIDC / PKCE 协议段用的是**无填充**变体,请用 Base64RawEncode。

func Base64EncodeBytes added in v0.14.0

func Base64EncodeBytes(b []byte) string

Base64EncodeBytes 返回字节切片的 Base64 编码(字节→字节方向的免拷贝入口)。

⚠️ 带填充变体;无填充请用 Base64RawEncodeBytes。

func Base64RawDecode added in v0.25.1

func Base64RawDecode(s string) (string, error)

Base64RawDecode 解码 Base64 编码的字符串(**无填充**变体,base64.RawStdEncoding)。

与 Base64Decode 的差别只有一处:输入不带 '=' 填充——JWT / OIDC / PKCE 协议段 正是这个形态(RFC 7515 §2:base64url 编码时省略 '=' 填充)。

func Base64RawDecodeBytes added in v0.25.1

func Base64RawDecodeBytes(s string) ([]byte, error)

Base64RawDecodeBytes 解码 Base64 为原始字节(**无填充**变体, base64.RawStdEncoding)。与 Base64DecodeBytes 的差别只有一处:输入不带 '=' 填充。

func Base64RawEncode added in v0.25.1

func Base64RawEncode(s string) string

Base64RawEncode 返回字符串的 Base64 编码(**无填充**变体,base64.RawStdEncoding)。

与 Base64Encode 的差别只有一处:末尾不补 '='。命名与 stdlib 对齐 (base64.RawStdEncoding)。

func Base64RawEncodeBytes added in v0.25.1

func Base64RawEncodeBytes(b []byte) string

Base64RawEncodeBytes 返回字节切片的 Base64 编码(**无填充**变体, base64.RawStdEncoding;字节→字节方向的免拷贝入口)。

func Base64RawURLDecode added in v0.25.1

func Base64RawURLDecode(s string) (string, error)

Base64RawURLDecode 解码 Base64 URL 安全编码的字符串(**无填充**变体, base64.RawURLEncoding)。

与 Base64URLDecode 的差别只有一处:输入不带 '=' 填充——JWT / OIDC / PKCE 协议段正是这个形态。拿带填充的 Base64URLDecode 解它会报 "illegal base64 data at input byte N"。

func Base64RawURLDecodeBytes added in v0.26.0

func Base64RawURLDecodeBytes(s string) ([]byte, error)

Base64RawURLDecodeBytes 解码 Base64 URL 安全编码为原始字节(**无填充**变体, base64.RawURLEncoding)。

与 Base64RawURLDecode 的差别只有一处:出参是字节切片——结果按字节使用的场景 (凭据还原 / PEM DER / 签名原文比对)不必再转一次 string,也不必担心把二进制 塞进 string 时的不可见字符问题(pkg#105)。

func Base64RawURLEncode added in v0.25.1

func Base64RawURLEncode(s string) string

Base64RawURLEncode 返回字符串的 Base64 URL 安全编码(**无填充**变体, base64.RawURLEncoding)。

与 Base64URLEncode 的差别只有一处:末尾不补 '='。这是 JWT / OIDC / PKCE 协议段的实际形态——base64url 的填充字符 '=' 在协议里不允许出现 (RFC 7515 §2)。

func Base64RawURLEncodeBytes added in v0.26.0

func Base64RawURLEncodeBytes(b []byte) string

Base64RawURLEncodeBytes 返回字节切片的 Base64 URL 安全编码(**无填充**变体, base64.RawURLEncoding;字节→字节方向的免拷贝入口)。

与 Base64RawURLEncode 的差别只有一处:入参是字节切片,不经一次 string↔[]byte 拷贝。JWT / OIDC / PKCE 协议段的原文常以 []byte 形态在手 (签名校验、密钥材料),走字节入口省掉一次拷贝(pkg#105)。

func Base64URLDecode

func Base64URLDecode(s string) (string, error)

Base64URLDecode 解码 Base64 URL 安全编码的字符串。

⚠️ 本方法是**带填充**变体(base64.URLEncoding)——输入必须带 '=' 填充。 JWT / OIDC / PKCE 协议段(无填充)请用 Base64RawURLDecode:拿本方法解无填充串 会报 "illegal base64 data at input byte N"。

func Base64URLEncode

func Base64URLEncode(s string) string

Base64URLEncode 返回字符串的 Base64 URL 安全编码。

⚠️ 本方法是**带填充**变体(base64.URLEncoding,末尾补 '=')——与 stdlib 默认 口径一致。JWT / OIDC / PKCE 协议段用的是**无填充**变体,请用 Base64RawURLEncode。

func Fnv1a64

func Fnv1a64(data []byte) uint64

Fnv1a64 返回数据的 64 位 FNV-1a 哈希值(非加密哈希,用于缓存分片/内容粗校验)。 跨服务持久化过哈希值的场景请勿更改算法假设(历史名 Hash,2026-09 改为如实命名)。

func Marshal

func Marshal(v any) ([]byte, error)

Marshal 将 v 序列化为 JSON 字节。

func MarshalIndent

func MarshalIndent(v any, prefix, indent string) ([]byte, error)

MarshalIndent 将 v 序列化为带缩进的 JSON 字节。

func MarshalToString

func MarshalToString(v any) (string, error)

MarshalToString 将 v 序列化为 JSON 字符串。

func Sha256

func Sha256(str string) string

Sha256 返回字符串的 SHA-256 十六进制字符串。

func Sha256Hex

func Sha256Hex(data []byte) string

Sha256Hex 返回数据的 SHA-256 十六进制字符串。 适用于内容校验和、缓存键等非加密签名场景(2026-09-15 治理轮: 移除 Md5/Md5Hex/Md5Bytes/Sha1 包装——共享 SDK 提供弱哈希入口容易被 误用到凭据/签名场景;确有 MD5/SHA-1 合规需求的业务自行引 crypto 标准库)。

func Unmarshal

func Unmarshal(data []byte, v any) error

Unmarshal 将 JSON 字节反序列化到 v。 使用 UseNumber 模式解析数字,避免精度丢失。 与 encoding/json.Unmarshal 语义一致:整个输入必须是单一 JSON 值, 尾部残留数据(截断修复失败/拼接脏数据)视为错误而非静默忽略。

func UnmarshalFromReader

func UnmarshalFromReader(reader io.Reader, v any) error

UnmarshalFromReader 从 Reader 读取 JSON 并反序列化到 v。

func UnmarshalFromString

func UnmarshalFromString(str string, v any) error

UnmarshalFromString 将 JSON 字符串反序列化到 v。 语义同 Unmarshal:尾部残留数据视为错误。

func UnmarshalFromStringUseNumber added in v0.3.0

func UnmarshalFromStringUseNumber(s string, v any) error

UnmarshalFromStringUseNumber 将 JSON 字符串反序列化到 v。 语义同 UnmarshalUseNumber:数字保留为 json.Number,防 >2^53 精度丢失。

func UnmarshalUseNumber added in v0.3.0

func UnmarshalUseNumber(b []byte, v any) error

UnmarshalUseNumber 将 JSON 字节反序列化到 v,数字显式解析为 json.Number (而非 float64)。js 数值只有 53 位整数精度,金额/雪花 ID 等 >2^53 的整数 经 float64 中转会静默丢失精度;json.Number 保留原文字面量,由业务按需 转 int64/string。目标字段为 any 时生效最明显;已声明类型的字段仍按 该类型解析。尾部残留数据视为错误(同 Unmarshal)。

func Valid

func Valid(data []byte) bool

Valid 检查 data 是否是合法的 JSON。

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL