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.
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.
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
use =
padding; raw variants omit padding.DecodeString
returns an error on invalid input; handle it.NewEncoder
/NewDecoder
for large data without loading everything into memory.