Go memiliki package encoding/base64, berisikan fungsi-fungsi untuk kebutuhan encode dan decode data ke base64 dan sebaliknya. Data yang akan di-encode harus bertipe []byte, perlu dilakukan casting untuk data-data yang belum sesuai tipenya.
Ada beberapa cara yang bisa digunakan untuk encode dan decode data, dan pada chapter ini kita akan mempelajarinya.
A.46.1. Penerapan Fungsi EncodeToString() & DecodeString()
Fungsi EncodeToString() digunakan untuk encode data dari bentuk string ke base64. Fungsi DecodeString() melakukan kebalikan dari EncodeToString(). Berikut adalah contoh penerapannya.
Variabel var data = "john wick" var encoded = make([]byte, base64.StdEncoding.EncodedLen(len(data))) base64.StdEncoding.Encode(encoded, []byte(data)) var encodedString = string(encoded) fmt.Println(encodedString) var decoded = make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) var _, err = base64.StdEncoding.Decode(decoded, encoded) if err != nil { fmt.Println(err.Error()) } var decodedString = string(decoded) fmt.Println(decodedString) 0 yang bertipe var data = "john wick" var encoded = make([]byte, base64.StdEncoding.EncodedLen(len(data))) base64.StdEncoding.Encode(encoded, []byte(data)) var encodedString = string(encoded) fmt.Println(encodedString) var decoded = make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) var _, err = base64.StdEncoding.Decode(decoded, encoded) if err != nil { fmt.Println(err.Error()) } var decodedString = string(decoded) fmt.Println(decodedString) 1, harus di-casting terlebih dahulu ke dalam bentuk []byte sebelum di-encode menggunakan fungsi var data = "john wick" var encoded = make([]byte, base64.StdEncoding.EncodedLen(len(data))) base64.StdEncoding.Encode(encoded, []byte(data)) var encodedString = string(encoded) fmt.Println(encodedString) var decoded = make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) var _, err = base64.StdEncoding.Decode(decoded, encoded) if err != nil { fmt.Println(err.Error()) } var decodedString = string(decoded) fmt.Println(decodedString) 3. Hasil encode adalah data base64 bertipe var data = "john wick" var encoded = make([]byte, base64.StdEncoding.EncodedLen(len(data))) base64.StdEncoding.Encode(encoded, []byte(data)) var encodedString = string(encoded) fmt.Println(encodedString) var decoded = make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) var _, err = base64.StdEncoding.Decode(decoded, encoded) if err != nil { fmt.Println(err.Error()) } var decodedString = string(decoded) fmt.Println(decodedString) 1.
Sedangkan pada fungsi decode var data = "john wick" var encoded = make([]byte, base64.StdEncoding.EncodedLen(len(data))) base64.StdEncoding.Encode(encoded, []byte(data)) var encodedString = string(encoded) fmt.Println(encodedString) var decoded = make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) var _, err = base64.StdEncoding.Decode(decoded, encoded) if err != nil { fmt.Println(err.Error()) } var decodedString = string(decoded) fmt.Println(decodedString) 5, data base64 bertipe var data = "john wick" var encoded = make([]byte, base64.StdEncoding.EncodedLen(len(data))) base64.StdEncoding.Encode(encoded, []byte(data)) var encodedString = string(encoded) fmt.Println(encodedString) var decoded = make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) var _, err = base64.StdEncoding.Decode(decoded, encoded) if err != nil { fmt.Println(err.Error()) } var decodedString = string(decoded) fmt.Println(decodedString) 1 di-decode kembali ke string aslinya, tapi bertipe []byte. Ekspresi var data = "john wick" var encoded = make([]byte, base64.StdEncoding.EncodedLen(len(data))) base64.StdEncoding.Encode(encoded, []byte(data)) var encodedString = string(encoded) fmt.Println(encodedString) var decoded = make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) var _, err = base64.StdEncoding.Decode(decoded, encoded) if err != nil { fmt.Println(err.Error()) } var decodedString = string(decoded) fmt.Println(decodedString) 8 menjadikan data []byte tersebut berubah menjadi string.
A.46.2. Penerapan Fungsi var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 0 & var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 1
Kedua fungsi ini kegunaannya sama dengan fungsi yang sebelumnya kita bahas, salah satu pembedanya adalah data yang akan dikonversi dan hasilnya bertipe []byte. Penggunaan cara ini cukup panjang karena variabel penyimpan hasil encode maupun decode harus disiapkan terlebih dahulu, dan harus memiliki lebar data sesuai dengan hasil yang akan ditampung (yang nilainya bisa dicari menggunakan fungsi var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 3 dan var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 4).
Lebih jelasnya silakan perhatikan contoh berikut.
var data = "john wick" var encoded = make([]byte, base64.StdEncoding.EncodedLen(len(data))) base64.StdEncoding.Encode(encoded, []byte(data)) var encodedString = string(encoded) fmt.Println(encodedString) var decoded = make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) var _, err = base64.StdEncoding.Decode(decoded, encoded) if err != nil { fmt.Println(err.Error()) } var decodedString = string(decoded) fmt.Println(decodedString)Fungsi var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 5 menghasilkan informasi lebar variable var data = "john wick" var encoded = make([]byte, base64.StdEncoding.EncodedLen(len(data))) base64.StdEncoding.Encode(encoded, []byte(data)) var encodedString = string(encoded) fmt.Println(encodedString) var decoded = make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) var _, err = base64.StdEncoding.Decode(decoded, encoded) if err != nil { fmt.Println(err.Error()) } var decodedString = string(decoded) fmt.Println(decodedString) 0 ketika sudah di-encode. Nilai tersebut kemudian ditentukan sebagai lebar alokasi tipe []byte pada variabel var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 8 yang nantinya digunakan untuk menampung hasil encoding.
Fungsi var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 9 memiliki kegunaan sama dengan var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 3, hanya saja digunakan untuk keperluan decoding.
Dibanding 2 fungsi sebelumnya, fungsi var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 0 dan var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 1 memiliki beberapa perbedaan. Selain lebar data penampung encode/decode harus dicari terlebih dahulu, terdapat perbedaan lainnya, yaitu pada fungsi ini hasil encode/decode tidak didapat dari nilai kembalian, melainkan dari parameter. Variabel yang digunakan untuk menampung hasil, disisipkan pada parameter fungsi tersebut.
Pada pemanggilan fungsi encode/decode, variabel var data = "//kalipare.com/" var encodedString = base64.URLEncoding.EncodeToString([]byte(data)) fmt.Println(encodedString) var decodedByte, _ = base64.URLEncoding.DecodeString(encodedString) var decodedString = string(decodedByte) fmt.Println(decodedString) 8 dan encoding/base644 tidak disisipkan nilai pointer-nya, cukup di-pass dengan cara biasa, tipe datanya sudah dalam bentuk []byte.
A.46.3. Encode & Decode Data URL
Khusus encode data string yang isinya merupakan URL, lebih efektif menggunakan encoding/base646 dibandingkan encoding/base647.
Cara penerapannya kurang lebih sama, bisa menggunakan metode pertama maupun metode kedua yang sudah dibahas di atas. Cukup ganti encoding/base647 menjadi encoding/base646.