go语言encoding/base64包提供标准与URL安全Base64编解码:EncodeToString将[]byte转Base64字符串,DecodeString反向解析并需检查错误;URLEncoding用-/_替代+/且默认无填充;二进制数据推荐流式处理。

Go语言标准库中的encoding/base64包提供了高效、安全的Base64编码与解码能力,无需第三方依赖,适用于http传输、密码学辅助、数据序列化等常见场景。
基础编码:字符串转Base64
使用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字符串还原为原始数据
用base64.StdEncoding.DecodeString()解码。该函数返回[]byte和错误;若输入非法(如长度非4倍数、含非法字符),会返回err != nil,务必检查错误。
立即学习“go语言免费学习笔记(深入)”;
Android高手进阶教程(八)之—-Android Widget开发案例(世界杯倒计时!),主要向大家讲解使用Android Widget如何编写出一款世界杯风格的倒计时程序,教程说出了制作步骤和代码。
2 - 解码前建议先用
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流式处理,避免内存暴涨
URL安全变体(base64.URLEncoding)
标准Base64含+和/,不适用于URL或文件名。Go提供base64.URLEncoding,用-和_替代,并默认无填充。
- 编码:
base64.URLEncoding.EncodeToString([]byte("Token"))→dG9rZW4=(实际输出无=) - 解码:
base64.URLEncoding.DecodeString("dG9rZW4")支持无填充输入 - 若需兼容旧系统(要求填充),可显式调用
.WithPadding(base64.StdPadding)
不复杂但容易忽略:始终校验解码错误,区分标准与URL变体,二进制数据优先走字节流而非字符串中间转换。