base64.StdEncoding.EncodeToString 是最常用的编码入口,需先将字符串转为 []byte;DecodeString 可能 panic,必须检查 error;URL 安全场景应使用 URLEncoding;大文件应避免 EncodeToString/DecodeString,改用 NewEncoder/NewDecoder 并注意 Close。
base64.StdEncoding.EncodeToString 是最常用的编码入口
Go 标准库的 encoding/base64 包不提供“一键编码字符串”的函数,必须先将字符串转为 []byte,再用编码器处理。常见错误是直接传字符串给 EncodeToString——它只接受字节切片。
正确做法:
- 用
[]byte("hello")转换原始字符串(UTF-8 安全) - 调用
base64.StdEncoding.EncodeToString()得到标准 Base64 字符串 - 注意:
StdEncoding使用+和/,适合 HTTP/JSON 场景;若需 URL 安全,改用URLEncoding
示例:
data := []byte("hello world")
encoded := base64.StdEncoding.EncodeToString(data) // "aGVsbG8gd29ybGQ="
base64.StdEncoding.DecodeString 可能 panic,必须检查 error
解码失败时,DecodeString 不返回空字符串或零值,而是返回 nil, error。忽略 error 会导致后续 panic(比如对 nil 切片做 range)。
典型错误场景:
- 输入含非法字符(如空格、换行、中文)
- 长度不是 4 的倍数(Base64 要求填充)
- 用了
URLEncoding编码却用StdEncoding解码
务必显式检查:
decoded, err := base64.StdEncoding.DecodeString("aGVsbG8gd29ybGQ=")
if err != nil {
log.Fatal(err) // 或返回错误
}
s := string(decoded) // "hello world"
URL 安全 Base64 需用 base64.URLEncoding,且不自动补等号
Web API 和 JWT 常用 URL 安全变体:用 - 替代 +,_ 替代 /,省略填充字符 =。Go 的 base64.URLEncoding 支持编码,但解码时对缺失 = 更宽容——它会自动补全。