Метод base64.Encoding.Decode

Метод base64.Encoding.Decode декодирует данные в формате Base64 в байтовый срез. Метод принимает два параметра: первый параметр — целевой срез байтов для записи результата, второй параметр — срез байтов (слайс) с закодированными данными Base64. Метод возвращает количество записанных байтов и ошибку. Если целевой срез слишком мал, метод вернет ошибку ErrTooSmall. Если данные содержат некорректные символы, метод вернет ошибку.

Синтаксис

godecodedLen, err := encoding.Decode(dst, src)

Пример

Давайте декодируем строку Base64 'SGVsbG8gV29ybGQ=' в байтовый срез:

gopackage main

import (
  "encoding/base64"
  "fmt"
)

func main() {
  src := []byte("SGVsbG8gV29ybGQ=")
  dst := make([]byte, base64.StdEncoding.DecodedLen(len(src)))
  n, err := base64.StdEncoding.Decode(dst, src)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Printf("Decoded %d bytes: %s\n", n, dst[:n])
}

Результат выполнения кода:

go"Decoded 11 bytes: Hello World"

Пример

Давайте декодируем строку Base64 с данными, имеющими неправильную длину:

gopackage main

import (
  "encoding/base64"
  "fmt"
)

func main() {
  src := []byte("SGVsbG8gV29ybGQ")
  dst := make([]byte, base64.StdEncoding.DecodedLen(len(src)))
  n, err := base64.StdEncoding.Decode(dst, src)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Printf("Decoded %d bytes: %s\n", n, dst[:n])
}

Результат выполнения кода:

go"Error: illegal base64 data at input byte 12"

Пример

Давайте покажем случай, когда целевой срез слишком мал для декодированных данных:

gopackage main

import (
  "encoding/base64"
  "fmt"
)

func main() {
  src := []byte("SGVsbG8gV29ybGQ=")
  dst := make([]byte, 5)
  n, err := base64.StdEncoding.Decode(dst, src)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Printf("Decoded %d bytes\n", n)
}

Результат выполнения кода:

go"Error: base64: decoded output too short"

Смотрите также