encoding/base64

Guided tour · Encoding · pkg.go.dev →

Base64 encoding. Standard, URL-safe, with or without padding — four ready-made encodings.

The four built-in encodings

StdEncoding and URLEncoding both pad with =. RawStdEncoding and RawURLEncoding skip padding — best for URLs and JWTs.

StdEncoding — classic, padded

s := base64.StdEncoding.EncodeToString([]byte("hello!"))
fmt.Println(s)   // aGVsbG8h

raw, _ := base64.StdEncoding.DecodeString(s)
fmt.Println(string(raw))
Output
aGVsbG8h
hello!

URLEncoding — uses - and _ instead of + and /

Safe in URLs and filenames without further escaping.

base64.URLEncoding.EncodeToString([]byte{0xff, 0xe6})  // "_-Y="

RawURLEncoding — no padding

Use this for JWT header/payload/signature segments.

base64.RawURLEncoding.EncodeToString([]byte("hi"))   // "aGk"

Streaming

Encoder to any io.Writer

Must be closed to flush any final bytes.

enc := base64.NewEncoder(base64.StdEncoding, os.Stdout)
enc.Write([]byte("hello world"))
enc.Close()   // writes trailing '=' padding
fmt.Println()