Go语言encoding/base64包提供标准与URL安全Base64编解码:EncodeToString将[]byte转Base64字符串,DecodeString反向解析并需检查错误;URLEncoding用-/_替代+/且默认无填充;二进制数据推荐流式处理。
Go语言标准库中的encoding/base64包提供了高效、安全的Base64编码与解码能力,无需第三方依赖,适用于HTTP传输、密码学辅助、数据序列化等常见场景。
使用base64.StdEncoding.EncodeToString()可将字节切片(如字符串转[]byte)快速编码为标准Base64字符串。注意:输入是[]byte,不是原始字符串;编码结果不含换行符,符合RFC 4648标准。
示例:
package main
import (
"encoding/base64"
"fmt"
)
func main()
{
data := "Hello, 世界"
encoded := base64.StdEncoding.EncodeToString([]byte(data))
fmt.Println(encoded) // SGVsbG8sIOS4lueVjA==
}
用base64.StdEncoding.DecodeString()解码。该函数返回[]byte和错误;若输入非法(如长度非4倍数、含非法字符),会返回err != nil,务必检查错误。
base64.StdEncoding.WithPadding(base64.NoPadding)处理无填充的输入(如URL安全变体)base64.RawStdEncoding(忽略填充)或预处理补足=
示例:
decoded, err := base64.StdEncoding.DecodeString("SGVsbG8sIOS4lueVjA==")
if err != nil {
panic(err)
}
fmt.Println(string(decoded)) // Hello, 世界
Base64常用于嵌入二进制资源(如PNG图标、JWT载荷)。此时直接操作[]byte更自然——读取文件后编码,或解码后写入文件。
os.File → io.ReadAll → EncodeToString
DecodeString → 写入新文件(注意设置正确权限,如0644)Encoder/Decoder流式处理,避免内存暴涨标准Base64含+和/,不适用于URL或文件名。Go提供base64.URLEncoding,用-和_替代,并默认无填充。
base64.URLEncoding.EncodeToString([]byte("token")) → dG9rZW4=(实际输出无=)base64.URLEncoding.DecodeString("dG9rZW4") 支持无填充输入.WithPadding(base64.StdPadding)
不复杂但容易忽略:始终校验解码错误,区分标准与URL变体,二进制数据优先走字节流而非字符串中间转换。