サンプルで学ぶ Go 言語:Base64 Encoding

Go は組み込みで base64 という エンコード形式をサポートしている。

package main

このように書くと、encoding/base64 パッケージを(デフォルトの base64 の代わりに)b64 という名前でインポートする。 これはスペースを節約するのに役立つ。

import (
    b64 "encoding/base64"
    "fmt"
)
func main() {

今からエンコード・デコードする文字列

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

Go は標準の base64 と、URL 文字列として使える base64 をいずれもサポートしている。 ここでは標準の方を使う。 エンコーダには []byte 型の値を渡すので、ここでは string 型からキャストしている。

    sEnc := b64.StdEncoding.EncodeToString([]byte(data))
    fmt.Println(sEnc)

入力によってはデコードは失敗するかもしれない。 その可能性があるなら、返り値からエラーの有無を確認できる。

    sDec, _ := b64.StdEncoding.DecodeString(sEnc)
    fmt.Println(string(sDec))
    fmt.Println()

根では URL として使える base64 フォーマットを使ってみる。

    uEnc := b64.URLEncoding.EncodeToString([]byte(data))
    fmt.Println(uEnc)
    uDec, _ := b64.URLEncoding.DecodeString(uEnc)
    fmt.Println(string(uDec))
}

文字列をエンコードした結果は、標準の形式と、URL 文字列として扱える形式とで微妙に違う(+-など)。 しかし、いずれの形式を使っても、デコードするともとの文字列に戻る。

$ go run base64-encoding.go
YWJjMTIzIT8kKiYoKSctPUB+
abc123!?$*&()'-=@~
YWJjMTIzIT8kKiYoKSctPUB-
abc123!?$*&()'-=@~

次の例:Reading Files