gpt4 book ai didi

go - Go Base64包中的 "StdEncoding"是什么

转载 作者:IT王子 更新时间:2023-10-29 02:04:23 29 4
gpt4 key购买 nike

我是一名经验丰富的程序员,但还是个新手,所以提前为我确定是一个简单的问题表示歉意。

base64 example code goland.org 站点上包含以下代码。

package main

import (
"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 部分做了什么 p>

 decoded, err := base64.StdEncoding.DecodeString(encoded)

我明白上面的程序将 encode/base64 函数导入到我的程序中。但是,如果我 look at the documentation ,base64包由以下类型和函数组成

func NewDecoder(enc *Encoding, r io.Reader) io.Reader
func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser
type CorruptInputError
func (e CorruptInputError) Error() string
type 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 上下文中,则可加分。

最佳答案

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

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 文档中,你会看到所有导出的内容,没有未导出的内容(如果你查看实际源代码,你通常会发现大量未导出的辅助方法)。如果您正在查看源代码,您可以在方法/类型/consts 等名称中看到这种区别。基本规则是,如果标识符以大写字母开头,则将其导出,如果是小写字母,则不导出。

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

关于go - Go Base64包中的 "StdEncoding"是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286793/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com