понедельник, 22 июня 2020 г.

Пакет base64 в Golang

Пакет base64 реализует base64 кодирование, определенное в RFC 4648.

Самым простым способом использование данного пакета являются методы EncodeToString и DecodeString.

EncodeToString возвращает base64 кодированную строку из исходного среза байтов.

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

Пример использования EncodeToString:

package main

import (
    "encoding/base64"
    "fmt"
)

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

Вывод:

YW55ICsgb2xkICYgZGF0YQ==

DecodeString возвращает байты, представляющие исходную base64 строку.

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

Пример использования DecodeString:

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    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"

Пример совместного использования EncodeToString и DecodeString:

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    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, 世界

NewEncoder возвращает новый потоковый кодер base64. Данные, записанные в возвращенное устройство записи, будут закодированы с использованием enc, а затем записаны в w. Кодировки Base64 работают в 4-байтовых блоках; по окончании записи вызывающая сторона должна закрыть возвращаемый кодер, чтобы сбросить все частично записанные блоки.

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

Пример использования NewEncoder:

package main

import (
    "encoding/base64"
    "os"
)

func main() {
    input := []byte("foo\x00bar")
    encoder := base64.NewEncoder(base64.StdEncoding, os.Stdout)
    encoder.Write(input)
    // По окончании работы необходимо закрыть encoder, 
    // чтобы сбросить все частичные блоки.
    // Если вы закомментируете следующую строку, 
    // последний частичный блок "r" не будет закодирован.
    encoder.Close()
}

Вывод:

Zm9vAGJhcg==


Читайте также:


Комментариев нет:

Отправить комментарий