Skip to main content
Go provides built-in support for base64 encoding/decoding.

Standard Base64 Encoding

Import the package with an alias to save space:
import (
    b64 "encoding/base64"
    "fmt"
)

data := "abc123!?$*&()'-=@~"

Encoding

The encoder requires a []byte, so convert your string:
sEnc := b64.StdEncoding.EncodeToString([]byte(data))
fmt.Println(sEnc)
// Output: YWJjMTIzIT8kKiYoKSctPUB+

Decoding

Decoding may return an error if the input is malformed:
sDec, _ := b64.StdEncoding.DecodeString(sEnc)
fmt.Println(string(sDec))
// Output: abc123!?$*&()'-=@~
Always check the error when decoding Base64 data, especially from untrusted sources.

URL-Compatible Base64

For URL-safe encoding, use URLEncoding:
uEnc := b64.URLEncoding.EncodeToString([]byte(data))
fmt.Println(uEnc)
// Output: YWJjMTIzIT8kKiYoKSctPUB-

uDec, _ := b64.URLEncoding.DecodeString(uEnc)
fmt.Println(string(uDec))
// Output: abc123!?$*&()'-=@~
URL encoding uses - and _ instead of + and / to avoid URL encoding issues.

Encoding Types

Uses + and / characters, suitable for most uses
Uses - and _ characters, safe for URLs and filenames
Standard encoding without padding = characters
URL encoding without padding = characters

Encoding Functions

EncodeToString
func(src []byte) string
Encodes bytes to a Base64 string
DecodeString
func(s string) ([]byte, error)
Decodes a Base64 string to bytes
Encode
func(dst, src []byte)
Encodes bytes to Base64 bytes
Decode
func(dst, src []byte) (n int, err error)
Decodes Base64 bytes to bytes

Working with Readers and Writers

For streaming operations, use encoders and decoders:
import (
    "encoding/base64"
    "os"
)

// Encode to stdout
encoder := base64.NewEncoder(base64.StdEncoding, os.Stdout)
encoder.Write([]byte("data to encode"))
encoder.Close()

// Decode from stdin
decoder := base64.NewDecoder(base64.StdEncoding, os.Stdin)
decodedData, _ := io.ReadAll(decoder)

Use Cases

Binary Data

Embed binary data in text formats

APIs

Transfer binary data in JSON/XML

Email

Encode attachments in MIME

Data URIs

Embed images in HTML/CSS

Example: Image Data URI

import (
    "encoding/base64"
    "fmt"
    "os"
)

data, _ := os.ReadFile("image.png")
encoded := base64.StdEncoding.EncodeToString(data)

dataURI := fmt.Sprintf("data:image/png;base64,%s", encoded)
fmt.Println(dataURI)

Package Reference

Build docs developers (and LLMs) love