...

パッケージ base64

import "encoding/base64"
概要
目次

概要 ▾

base64 パッケージは RFC 4648 で定義された base64 エンコードを実装します。

コード:

msg := "Hello, 世界"
encoded := base64.StdEncoding.EncodeToString([]byte(msg))
fmt.Println(encoded)
decoded, err := base64.StdEncoding.DecodeString(encoded)
if err != nil {
    fmt.Println("decode error:", err)
    return
}
fmt.Println(string(decoded))

出力:

SGVsbG8sIOS4lueVjA==
Hello, 世界

定数

const (
    StdPadding rune = '=' // 標準パディング文字
    NoPadding  rune = -1  // パディングなし
)

変数

RawStdEncoding は, RFC 4648 のセクション 3.2 で定義されている標準的なパッドなしの base64 エンコーディングです。 これは StdEncoding と同じですが,パディング文字を省略します。

var RawStdEncoding = StdEncoding.WithPadding(NoPadding)

RawURLEncoding は, RFC 4648 で定義されている,パッドなしの代替 base64 エンコーディングです。 通常, URL およびファイル名で使用されます。 これは URLEncoding と同じですが,パディング文字を省略します。

var RawURLEncoding = URLEncoding.WithPadding(NoPadding)

StdEncoding は, RFC 4648 で定義されている標準の base64 エンコーディングです。

var StdEncoding = NewEncoding(encodeStd)

URLEncoding は, RFC 4648 で定義されている代替 base64 エンコーディングです。 通常, URL およびファイル名で使用されます。

var URLEncoding = NewEncoding(encodeURL)

func NewDecoder

func NewDecoder(enc *Encoding, r io.Reader) io.Reader

NewDecoder は新しい base64 ストリームデコーダを構築します。

func NewEncoder

func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser

NewEncoder は新しい base64 ストリームエンコーダを返します。 返されたライターに書き込まれたデータは enc を使用してエンコードされてから w に書き込まれます。 Base64 エンコーディングは 4 バイトブロックで動作します。 書き込みが終了したら,呼び出し側は返されたエンコーダを閉じて, 部分的に書き込まれたブロックをフラッシュする必要があります。

コード:

input := []byte("foo\x00bar")
encoder := base64.NewEncoder(base64.StdEncoding, os.Stdout)
encoder.Write(input)
// 部分ブロックのフラッシュが完了したら,エンコーダを閉じる必要があります。
// 次の行をコメントアウトすると,最後の部分ブロック "r" はエンコードされません。
encoder.Close()

出力:

Zm9vAGJhcg==

type CorruptInputError

type CorruptInputError int64

func (CorruptInputError) Error

func (e CorruptInputError) Error() string

type Encoding

エンコードは, 64 文字のアルファベットで定義された基数 64 のエンコード / デコード方式です。 最も一般的なエンコーディングは, RFC 4648 で定義され, MIME (RFC 2045) および PEM (RFC 1421) で使用されている "base64" エンコーディングです。 RFC 4648 では,代替エンコーディングも定義されています。 これは, + と / の代わりに - と _ を使用した標準エンコーディングです。

type Encoding struct {
    // エクスポートされていないフィールドがあります
}

func NewEncoding

func NewEncoding(encoder string) *Encoding

NewEncoding は,指定されたアルファベットで定義された新しい Encoding を返します。 これは,パディング文字または CR / LF ('\r', '\n') を含まない 64 バイトの文字列である必要があります。 結果のエンコーディングは,デフォルトのパディング文字 ('=') を使用します。 これは, WithPadding によって変更または無効にすることができます。

func (*Encoding) Decode

func (enc *Encoding) Decode(dst, src []byte) (n int, err error)

デコード enc はエンコーディング enc を使って src をデコードします。 最大で DecodedLen(len(src)) バイトを dst に書き込み,書き込まれたバイト数を返します。 src に無効な base64 データが含まれている場合は, 正常に書き込まれたバイト数と CorruptInputError が返されます。 改行文字 (\r と \n) は無視されます。

func (*Encoding) DecodeString

func (enc *Encoding) DecodeString(s string) ([]byte, error)

DecodeString は, base64 文字列 s で表されるバイトを返します。

コード:

str := "c29tZSBkYXRhIHdpdGggACBhbmQg77u/"
data, err := base64.StdEncoding.DecodeString(str)
if err != nil {
    fmt.Println("error:", err)
    return
}
fmt.Printf("%q\n", data)

出力:

"some data with \x00 and \ufeff"

func (*Encoding) DecodedLen

func (enc *Encoding) DecodedLen(n int) int

DecodedLen は, n バイトの base64 エンコードデータに対応するデコードデータの最大長をバイト数で返します。

func (*Encoding) Encode

func (enc *Encoding) Encode(dst, src []byte)

Encode はエンコーディング enc を使用して src をエンコードし, EncodedLen(len(src)) バイトを dst に書き込みます。

エンコーディングは出力を 4 バイトの倍数にパディングするので, Encode は大きなデータストリームの個々のブロックでの使用には適していません。 代わりに NewEncoder() を使用してください。

func (*Encoding) EncodeToString

func (enc *Encoding) EncodeToString(src []byte) string

EncodeToString は, src の base64 エンコーディングを返します。

コード:

data := []byte("any + old & data")
str := base64.StdEncoding.EncodeToString(data)
fmt.Println(str)

出力:

YW55ICsgb2xkICYgZGF0YQ==

func (*Encoding) EncodedLen

func (enc *Encoding) EncodedLen(n int) int

EncodedLen は,長さ n の入力バッファの base64 エンコーディングの長さをバイト数で返します。

func (Encoding) Strict 1.8

func (enc Encoding) Strict() *Encoding

Strict は,厳密なデコードが有効になっていることを除いて, Strict は enc と同じ新しいエンコードを作成します。 このモードでは, RFC 4648 のセクション 3.5 で説明されているように, デコーダは後続パディングビットがゼロであることを要求します。

func (Encoding) WithPadding 1.5

func (enc Encoding) WithPadding(padding rune) *Encoding

WithPadding は,padding 文字を変更した,あるいは,NoPadding でパディングを無効にした点を除いて enc と同じ新しいエンコーディングを作成します。 padding 文字は '\r' や '\n' であってはならず,エンコーディングのアルファベットに含まれてはならず, '\xff' 以下のルーンでなければなりません。