为了账号安全,请及时绑定邮箱和手机立即绑定

Go Base64 包中的“StdEncoding”是什么

Go Base64 包中的“StdEncoding”是什么

Go
呼唤远方 2022-01-10 17:00:02
我是一位经验丰富的程序员,但刚开始工作,所以提前为我确信这是一个简单的问题道歉。该站点上的base64 示例代码goland.org包括以下代码。package mainimport (    "encoding/base64"    "fmt")func main() {    msg := "Hello, 世界"    encoded := base64.StdEncoding.EncodeToString([]byte(msg))    fmt.Println(encoded)    decoded, err := base64.StdEncoding.DecodeString(encoded)    if err != nil {        fmt.Println("decode error:", err)        return    }    fmt.Println(string(decoded))}我可以毫无问题地复制和使用这段代码,但作为一个新的 Go 程序员,我不明白以下几行的那部分是做什么的StdEncoding decoded, err := base64.StdEncoding.DecodeString(encoded)我了解上述程序将encode/base64功能导入我的程序。但是,如果我查看文档,base64 包包含以下类型和功能func NewDecoder(enc *Encoding, r io.Reader) io.Readerfunc NewEncoder(enc *Encoding, w io.Writer) io.WriteClosertype CorruptInputError    func (e CorruptInputError) Error() stringtype Encoding    func NewEncoding(encoder string) *Encoding    func (enc *Encoding) Decode(dst, src []byte) (n int, err error)    func (enc *Encoding) DecodeString(s string) ([]byte, error)    func (enc *Encoding) DecodedLen(n int) int    func (enc *Encoding) Encode(dst, src []byte)    func (enc *Encoding) EncodeToString(src []byte) string    func (enc *Encoding) EncodedLen(n int) int    func (enc Encoding) WithPadding(padding rune) *Encoding我希望看到一种类型StdEncoding——但我没有StdEncoding在这个列表中看到任何提及。所以,我的直接问题是——什么是StdEncoding?我的更高级别的问题可能是——究竟是从模块中导出什么以供该模块的用户使用,以及作为 go 用户,我如何浏览这些导出的内容。如果您可以纠正任何不知情的滥用术语(如上面的模块、导出、导入)并将它们放入 go 上下文中,则可以获得奖励积分。
查看完整描述

1 回答

?
MM们

TA贡献1886条经验 获得超2个赞

尝试一次回答您的所有问题...您可以StdEncoding在文件 base64.go 中找到它的定义,它包含在此处;


65  // StdEncoding is the standard base64 encoding, as defined in

66  // RFC 4648.

67  var StdEncoding = NewEncoding(encodeStd)

并且在第 33 行上, const 被定义为这样;


33  const encodeStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

因此,要回答您的主要问题,它只是 RFC 4648 中定义的 base64 编码。类型是*Encoding,NewEncoding如果您愿意,您甚至可以在同一位置查看实现。https://golang.org/src/encoding/base64/base64.go


为了解决一些关于包/模块和导出的辅助问题......在 go 文档中,您将看到所有已导出的内容,并且没有任何未导出的内容(如果您查看实际源代码,您通常会发现很多未导出的辅助方法)。如果您查看源代码,您可以在方法/类型/常量等名称中看到这种区别。基本规则是,如果标识符以大写字母开头,则导出,如果是小写,则不导出。


值得指出的另一件事是该语言是开源的。在文档中,它通常会列出包主文件(可能还有其他文件),以便您打开并查看。你会发现代码注释很好,而且通常很容易理解。通常,您只需阅读这些文件中的注释即可找到有关内部工作方式的问题的答案。


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 480 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号