Go Base64

This page summarizes Base64 usage in Go with the standard package encoding/base64. It covers the common encodings, basic APIs, streaming, and file I/O examples.

Overview

Go provides several predefined encodings: StdEncoding, URLEncoding, and their paddingless variants RawStdEncoding and RawURLEncoding. The main operations are EncodeToString/DecodeString, or using NewEncoder/NewDecoder for streams.

Quick examples

Basic encode/decode (string/bytes)

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-safe and raw (no padding)

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
}

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

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

Notes