Go 语言中的 Base64

本页概述 Go 语言使用标准包 encoding/base64 进行 Base64 的方式, 涵盖常见编码、基础 API、流式处理与文件 I/O 示例。

概览

Go 提供多种预定义编码:StdEncodingURLEncoding,以及对应的无填充变体 RawStdEncodingRawURLEncoding。 常用操作包括 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
}

URL 安全与 Raw(无填充)

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
}

基于 io.Reader/io.Writer 的流式处理

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)
}

文件 I/O

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)
}

注意事项