uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

GoでURL safeなbase64エンコード・デコードの例を書いてみる

[PHP]URL safe な base64 encode メソッド - Hack Your Design!

ここにあるURL Safeなエンコード・デコードの例をPHPに実装してみる。

package main

import (
        "encoding/base64"
        "fmt"
        "strings"
)

func y64_encode(raw_str string) string {
        encode_str := base64.StdEncoding.EncodeToString([]byte(raw_str))
        r := strings.NewReplacer("=", "-", "/", "_", "+", ".")
        y64_encode_str := r.Replace(encode_str)
        return y64_encode_str
}

func y64_decode(y64_encode_str string) string {
        r := strings.NewReplacer("-", "=",  "_", "/",".","+")
        b64_decode_str := r.Replace(y64_encode_str)
        data, err := base64.StdEncoding.DecodeString(b64_decode_str)
        if err != nil {
                fmt.Println("error: ", err)
                return ""
        }
        return string(data)
}

func main() {

        y64s := "aHR0cDovL2hlYWRsaW5lcy55YWhvby5jby5qcC9obD9hPTIwMTMwOTIzLTAwMDAwMDEzLW15Y29tai1lbnQ-"
        fmt.Println(y64_decode(y64s))
        fmt.Println(y64_encode(y64_decode(y64s)))
}

strings.NewReplacer() は置換される文字の対応関係がわかって書きやすいかなという印象。
ただ、大量の文字列になってくると正規表現での置換のほうが読みやすいかも。

あとは、byteの配列に置き換えるところがわからなくて少し悩んだ。
それ以外は特につまずくところもなくすんなり書けた。

もうしばらくはライブラリの使い方覚える意味で適当なコードを書いていきたい。

基礎からわかる Go言語

基礎からわかる Go言語