StdEncoding and URLEncoding both pad with =. RawStdEncoding and RawURLEncoding skip padding — best for URLs and JWTs.
StdEncoding — classic, padded
s := base64.StdEncoding.EncodeToString([]byte("hello!"))
fmt.Println(s) // aGVsbG8h
raw, _ := base64.StdEncoding.DecodeString(s)
fmt.Println(string(raw))
Output
aGVsbG8h
hello!
URLEncoding — uses - and _ instead of + and /
Safe in URLs and filenames without further escaping.
base64.URLEncoding.EncodeToString([]byte{0xff, 0xe6}) // "_-Y="
RawURLEncoding — no padding
Use this for JWT header/payload/signature segments.
base64.RawURLEncoding.EncodeToString([]byte("hi")) // "aGk"