Help us shape the future of Go! Take the 2026 Go Developer Survey

encoding

package
v0.28.1 Latest Latest
Warning

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

Go to latest
Published: Oct 27, 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