如何在 Go 中对 Base64 进行 URL 安全解码,用 Perl 编码?

Dem*_*urg 3 base64 decode go

我有一个 URL 安全编码的字符串(由 Perl 生成),我需要在 Go 中对其进行解码。这里有两个程序,分别是 Perl 和 Go - Perl 工作正常,但 Go 出现错误。我无法理解。请帮忙!

=== Perl 代码 - 工作正常

#!/usr/bin/env perl
use common::sense;
use MIME::Base64::URLSafe;

my $str = 'Oi6cQzmolrUhkgHsNehtj9p_OsasB_6CIeygK0owoxTsXCtVWyQi-7DXxIJiaV-kSc6PGNC6uNz5V0A9QOGCaeCy6PolQY2Lt_v4JM42VEbsuML8guHfMO0ydvbXVcCR-yLfkz5CO0f-P1hVqxJBD8qPvk1t1DRzqmHP41DSfIm_WzlhtITnd_Wjt6E3CFS78HL3XjJlM-QBW9Z_GZgic8y7TlOWFzCRUf2Q-EZschrDi9l81E93XBNKe8knInL_uFN_oK_ob7fjnkGJO54RNn3coVsrzuIoNa6AI6oWLfsaJ5NyQYor5P0';

say urlsafe_b64decode($str);
Run Code Online (Sandbox Code Playgroud)

=== Go 代码 - 出现错误

package main

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

func main() {
    str := "Oi6cQzmolrUhkgHsNehtj9p_OsasB_6CIeygK0owoxTsXCtVWyQi-7DXxIJiaV-kSc6PGNC6uNz5V0A9QOGCaeCy6PolQY2Lt_v4JM42VEbsuML8guHfMO0ydvbXVcCR-yLfkz5CO0f-P1hVqxJBD8qPvk1t1DRzqmHP41DSfIm_WzlhtITnd_Wjt6E3CFS78HL3XjJlM-QBW9Z_GZgic8y7TlOWFzCRUf2Q-EZschrDi9l81E93XBNKe8knInL_uFN_oK_ob7fjnkGJO54RNn3coVsrzuIoNa6AI6oWLfsaJ5NyQYor5P0"

    fmt.Println("source B64:", str)
    _, err := b64.URLEncoding.DecodeString(str)

    if err != nil {
        fmt.Println("error b64:", err)
    }
}
Run Code Online (Sandbox Code Playgroud)

===结束

由于 decode 返回截断的结果,因此无法在下一步中使用它。

Cer*_*món 8

没有填充时使用RawURLEncoding

_, err := b64.RawURLEncoding.DecodeString(str)
Run Code Online (Sandbox Code Playgroud)