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