本页概述 Go 语言使用标准包 encoding/base64 进行 Base64 的方式,
涵盖常见编码、基础 API、流式处理与文件 I/O 示例。
Go 提供多种预定义编码:StdEncoding、URLEncoding,以及对应的无填充变体 RawStdEncoding、RawURLEncoding。
常用操作包括 EncodeToString/DecodeString,或通过 NewEncoder/NewDecoder 进行流式处理。
package main
import (
"encoding/base64"
"fmt"
)
func main() {
text := "Hello, world"
// Encode string (as bytes)
b64 := base64.StdEncoding.EncodeToString([]byte(text))
fmt.Println(b64) // SGVsbG8sIHdvcmxk
// Decode back to bytes
bytes, err := base64.StdEncoding.DecodeString(b64)
if err != nil { panic(err)
}
fmt.Println(string(bytes)) // Hello, world
}
package main
import (
"encoding/base64"
"fmt"
)
func main() {
raw := []byte("token:id/123+scope")
urlB64 := base64.URLEncoding.EncodeToString(raw)
fmt.Println(urlB64) // dG9rZW46aWQvMTIzK3Njb3Bl
// Raw variant (no '=')
rawB64 := base64.RawURLEncoding.EncodeToString(raw)
fmt.Println(rawB64) // dG9rZW46aWQvMTIzK3Njb3Bl (no padding)
dec, _ := base64.URLEncoding.DecodeString(urlB64)
fmt.Println(string(dec)) // token:id/123+scope
}
package main
import (
"encoding/base64"
"io"
"os"
)
func main() {
// Encode stdin to stdout as Base64
enc := base64.NewEncoder(base64.StdEncoding, os.Stdout)
defer enc.Close()
io.Copy(enc, os.Stdin)
}
package main
import (
"encoding/base64"
"os"
"strings"
)
func main() {
// Binary file → Base64 text
data, err := os.ReadFile("input.bin")
if err != nil { panic(err) }
b64 := base64.StdEncoding.EncodeToString(data)
os.WriteFile("output.txt", []byte(b64), 0644)
// Base64 text → Binary file
b, err := os.ReadFile("output.txt")
if err != nil { panic(err) }
decoded, err := base64.StdEncoding.DecodeString(strings.TrimSpace(string(b)))
if err != nil { panic(err) }
os.WriteFile("restored.bin", decoded, 0644)
}
StdEncoding/URLEncoding 使用 = 填充;Raw 变体不使用填充。DecodeString 对无效输入会返回错误,注意处理。NewEncoder/NewDecoder,避免一次性载入内存。