原文:CalliCoder — Base64 Encoding and Decoding in Golang
Base64 是一種二進位轉文字編碼方案。它用可列印的 ASCII 字串格式對二進位資料進行編碼。當需要透過僅設計用來處理文字資料無法正確處理二進位資料的通訊媒介傳輸二進位檔案時,通常會使用它。
Go 內建支援對 Base64 編碼和解碼。在本文中,你將學到如何在 Go 中進行 Base64 編碼和解碼。
Go 中的 Base64 編碼
Go 的 encoding/base64 package 支援標準及與網址相容的 Base64 編碼和解碼。與網址相容的 Base64 編碼允許你將 Base64 編碼的字串安全的放在網址內。
讓我們來看個範例:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
data := "Gol@ng is Awesome?~"
// Standard Base64 Encoding
encodedData := base64.StdEncoding.EncodeToString([]byte(data))
fmt.Println(encodedData)
// URL and filename-safe Base64 encoding
urlSafeEncodedData := base64.URLEncoding.EncodeToString([]byte(data))
fmt.Println(urlSafeEncodedData)
}
# Output
R29sQG5nIGlzIEF3ZXNvbWU/fg==
R29sQG5nIGlzIEF3ZXNvbWU_fg==
無填充的 Base64 編碼
如果你想進行原始、無填充的 Base64 編碼,那麼你可以使用 RawStdEncoding
和 RawURLEncoding
。它們與 StdEncoding
和 URLEncoding
相同,但省略了填充字元。請注意,在實際使用上,你應該只使用上面範例中有填充的 Base64 編碼。
以下是無填充的 Base64 編碼範例:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
data := "Gol@ng is Awesome?~"
// Standard Base64 Encoding without padding
encodedDataWithoutPadding := base64.RawStdEncoding.EncodeToString([]byte(data))
fmt.Println(encodedDataWithoutPadding)
// URL and filename-safe Base64 encoding without padding
urlSafeEncodedDataWithoutPadding := base64.RawURLEncoding.EncodeToString([]byte(data))
fmt.Println(urlSafeEncodedDataWithoutPadding)
}
# Output
R29sQG5nIGlzIEF3ZXNvbWU/fg
R29sQG5nIGlzIEF3ZXNvbWU_fg
Go 中的 Base64 解碼
以下範例示範了如何在 Go 中解碼 Base64 編碼的字串:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
encodedData := "R29sQG5nIGlzIEF3ZXNvbWU/fg=="
// Standard Base64 Decoding
decodedData, err := base64.StdEncoding.DecodeString(encodedData)
if err != nil {
fmt.Printf("Error decoding Base64 encoded data %v", err)
}
fmt.Println(string(decodedData))
// URL and filename-safe Base64 decoding
urlSafeBase64EncodedData := "R29sQG5nIGlzIEF3ZXNvbWU_fg=="
urlSafeData, err := base64.URLEncoding.DecodeString(urlSafeBase64EncodedData)
if err != nil {
fmt.Printf("Error decoding Base64 encoded data %v", err)
}
fmt.Println(string(urlSafeData))
}
# Output
Gol@ng is Awesome?~
Gol@ng is Awesome?~