Base64 Encoding

Base64 Encoding #

// Go fornece suporte nativo para [base64
// encoding/decoding](https://en.wikipedia.org/wiki/Base64).

package main

// Esta sintaxe importa o pacote `encoding/base64` com o
// nome `b64` ao invés do nome padrão `base64`.
// Isso poupará algum espaço abaixo.
import (
	b64 "encoding/base64"
	"fmt"
)

func main() {

	// Aqui está a `string` que será objeto de encode/decode.
	data := "abc123!?$*&()'-=@~"

	// Go suporta tanto padrão quanto base64 compatível
	// com URL. Aqui está como realizar encode usando o
	// encoder padrão. O encoder requer `[]byte` então
	// antes é convertida a string para este tipo.
	sEnc := b64.StdEncoding.EncodeToString([]byte(data))
	fmt.Println(sEnc)

	// Realizar o Decode pode retornar um erro,
	// o qual pode ser checado se ainda não se sabe
	// se o input está bem formatado.
	sDec, _ := b64.StdEncoding.DecodeString(sEnc)
	fmt.Println(string(sDec))
	fmt.Println()

	// Este encode/decode está usando base-64 compatível
	// com URL.
	uEnc := b64.URLEncoding.EncodeToString([]byte(data))
	fmt.Println(uEnc)
	uDec, _ := b64.URLEncoding.DecodeString(uEnc)
	fmt.Println(string(uDec))
}
# As strings resultantes de ambos os métodos de encode,
# padrão e compatível com URL, são um pouco diferentes
# entre si (variando `+` e `-` ao final) mas se for
# realizado decode, ambas retornam a mesma string
# original, como esperado.
$ go run base64-encoding.go
YWJjMTIzIT8kKiYoKSctPUB+
abc123!?$*&()'-=@~

YWJjMTIzIT8kKiYoKSctPUB-
abc123!?$*&()'-=@~