Base64 Encoding in Go

Go's encoding/base64 package provides standard and URL-safe Base64 encoding.

Basic Usage

Encode to Base64

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    text := "Hello, World!"
    encoded := base64.StdEncoding.EncodeToString([]byte(text))
    fmt.Println(encoded) // "SGVsbG8sIFdvcmxkIQ=="
}

Decode from Base64

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    encoded := "SGVsbG8sIFdvcmxkIQ=="
    decoded, err := base64.StdEncoding.DecodeString(encoded)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(decoded)) // "Hello, World!"
}

URL-Safe Base64

Use URLEncoding for URL-safe Base64:

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    text := "Hello, World!"

    // Standard URL encoding (with padding)
    encoded := base64.URLEncoding.EncodeToString([]byte(text))
    fmt.Println(encoded)

    // Raw URL encoding (no padding)
    encodedRaw := base64.RawURLEncoding.EncodeToString([]byte(text))
    fmt.Println(encodedRaw)
}

Encoding Types

Go provides four encoding types:

// Standard Base64
base64.StdEncoding      // With padding (=)
base64.RawStdEncoding   // Without padding

// URL-safe Base64
base64.URLEncoding      // With padding
base64.RawURLEncoding   // Without padding

File to Base64

Encode a File

package main

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

func main() {
    data, err := os.ReadFile("image.png")
    if err != nil {
        panic(err)
    }

    encoded := base64.StdEncoding.EncodeToString(data)
    fmt.Println(encoded)
}

Decode to File

package main

import (
    "encoding/base64"
    "os"
)

func main() {
    encoded := "iVBORw0KGgo..." // Base64 string

    decoded, err := base64.StdEncoding.DecodeString(encoded)
    if err != nil {
        panic(err)
    }

    err = os.WriteFile("output.png", decoded, 0644)
    if err != nil {
        panic(err)
    }
}

Streaming

For large files, use streaming encoders/decoders:

package main

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

func main() {
    // Encode file to Base64 file
    inFile, _ := os.Open("input.bin")
    outFile, _ := os.Create("output.txt")

    encoder := base64.NewEncoder(base64.StdEncoding, outFile)
    io.Copy(encoder, inFile)
    encoder.Close()

    inFile.Close()
    outFile.Close()
}

Custom Encoding

Create a custom alphabet:

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    // Custom alphabet (must be 64 chars + padding char)
    customEncoding := base64.NewEncoding(
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
    )

    encoded := customEncoding.EncodeToString([]byte("Hello"))
    fmt.Println(encoded)
}