go 标准库的简单介绍
https://pkg.go.dev/std
archive
https://pkg.go.dev/archive
目前不存在 archive 包本身,存在其子包,这个包,包含的内容是对于档案文件的处理,比如 tar,zip 这种文档文件。
archive/tar
https://pkg.go.dev/archive/tar
import "archive/tar"
archive/tar
包,实现了对 tar 文件的处理
- tar 文件头的设置
- tar 文件的读写
archive/zip
https://pkg.go.dev/archive/zip
import "archive/zip"
archive/zip
包,实现了对 zip 文件的处理
- zip 文件头的设置
- zip 文件的读写
bufio
https://pkg.go.dev/bufio
import "bufio"
bufio
包,提供了有缓冲的 i/o,比 io 包封装程度更高。使用缓冲区来一次读取多个字节,从而减少系统调用的次数。
- 提供了基本的读写功能
- 提供了逐行读取的功能
builtin
https://pkg.go.dev/builtin
注意,此包无法使用 import 的方式引入,因为它只是内部包和内部类型的一个存放位置而已
比如有 append() clear() max() min() int float64 等等
bytes
https://pkg.go.dev/bytes
import "bytes"
bytes 包,包含了很多处理 bytes 类型的操作。
跟字符串的基本操作类型
cmp
https://pkg.go.dev/cmp
import "cmp"
cmp 包提供了有关比较的相关内容。
- cmp.Ordered 表示可比较的类型约束
- 提供了比较函数
compress
https://pkg.go.dev/compress
不直接提供 compress 包,提供了众多子包,所有的内容都是关于压缩算法
compress/bzip2
https://pkg.go.dev/compress/bzip2
import "compress/bzip2"
提供了 bzip2 的解压功能,然而并没有提供压缩的功能
compress/flate
https://pkg.go.dev/compress/flate
import "compress/flate"
flate 实现了 RFC1951 中描述的 DEFLATE 压缩数据格式。
compress/gzip
https://pkg.go.dev/compress/gzip
import "compress/gzip"
gzip 实现了对 gzip 格式压缩文件的解压 (读取) 和压缩 (写入)
compress/lzw
https://pkg.go.dev/compress/lzw
import "compress/lzw"
lzw 实现了 lzw 文件 (Lempel-Ziv-Welch) 的解压缩操作。
compress/zlib
https://pkg.go.dev/compress/zlib
import "compress/zlib"
zlib 实现了对 zlib 格式文件的解压和压缩操作。
container
https://pkg.go.dev/container
container 没有提供本包,提供了众多子包,这个目录下的内容都是关于容器的,这也是 go 提供的内置容器
container/heap
https://pkg.go.dev/container/heap
import "container/heap"
go 内置的堆,值得注意的是,go 语言仅提供了接口以及接口的相关函数,并没有具体的实现,使用时还需要自行实现接口。
container/list
https://pkg.go.dev/container/list
import "container/list
go 内置的双向链表,这里不是接口了,是已经实现好了的双向链表
container/ring
https://pkg.go.dev/container/ring
import "container/ring"
go 内置的循环链表,非接口,已经实现好了
context
https://pkg.go.dev/context
import "context"
context 提供了在 “多线程” 的场景下的线程控制功能,简单的说就是 context 这个上下文可以统一取消所有的上下文环境中的 goroutine
func main() {
// cal的调用,以及计时器的到达均可调用 ctx.Done() 的发生。
ctx, cal := context.WithTimeout(context.Background(), time.Second*1)
defer cal()
go func() {
select {
case <-time.After(time.Second * 2):
fmt.Print(1)
case <-ctx.Done():
fmt.Print(2)
}
}()
time.Sleep(time.Second * 3)
}
crypto
https://pkg.go.dev/crypto
import "crypto"
crypto 包,包含了很多加密算法
crypto/aes
https://pkg.go.dev/crypto/aes
import "crypto/aes"
提供了 aes 加密算法的加密过程。此算法为对称加密算法
- 创建一个密钥
crypto/cipher
https://pkg.go.dev/crypto/cipher
import "crypto/cipher"
crypto/des
https://pkg.go.dev/crypto/des
import "crypto/des"
crypto/dsa
https://pkg.go.dev/crypto/dsa
import "crypto/dsa"
crypto/ecdh
https://pkg.go.dev/crypto/ecdh
import "crypto/ecdh"
crypto/ecdsa
https://pkg.go.dev/crypto/ecdsa
import "crypto/ecdsa"
crypto/ed25519
https://pkg.go.dev/crypto/ed25519
import "crypto/ed25519"
crypto/elliptic
https://pkg.go.dev/crypto/elliptic
import "crypto/elliptic"
crypto/hmac
https://pkg.go.dev/crypto/hmac
import "crypto/hmac"
crypto/md5
https://pkg.go.dev/crypto/md5
import "crypto/md5"
crypto/rand
https://pkg.go.dev/crypto/rand
import "crypto/rand"
crypto/rc4
https://pkg.go.dev/crypto/rc4
import "crypto/rc4"
crypto/rsa
https://pkg.go.dev/crypto/rsa
import "crypto/rsa"
crypto/sha1
https://pkg.go.dev/crypto/sha1
import "crypto/sha1"
crypto/sha256
https://pkg.go.dev/crypto/sha256
import "crypto/sha256"
crypto/sha512
https://pkg.go.dev/crypto/sha512
import "crypto/sha512"
crypto/subtle
https://pkg.go.dev/crypto/subtle
import "crypto/subtle"
crypto/tls
https://pkg.go.dev/crypto/tls
import "crypto/tls"
crypto/x509
https://pkg.go.dev/crypto/x509
import "crypto/x509"
crypto/x509/pkix
https://pkg.go.dev/crypto/x509/pkix
import "crypto/x509/pkix"
database
https://pkg.go.dev/database 此包不可直接使用,它包含了子包,这个子包是处理 sql 的统一接口,并不提供实际的实现
database/sql
https://pkg.go.dev/database/sql
import _ "database/sql"
当我们使用 MySQL,Redis 等数据库的时候,通常要使用上述的方式引入这个包,此包提供了 SQL 操作的接口。
使用此包必须跟第三方的数据库驱动结合,比如下面这种操作:
import(
_ "database/sql"
"xx/mysql"
)
database/sql/driver
https://pkg.go.dev/database/sql/driver
import "database/sql/driver"
driver 包,包含了数据库 driver 的接口,要想实现某个数据库的驱动 (driver) 就必须引入此包,实现此包定义接口的具体内容。
在被用户使用的时候,引入第三方数据库驱动,加上引入 database/sql 这个 SQL 操作包,就可以实现正常的 SQL 操作。
debug
https://pkg.go.dev/debug
不提供 debug 包本身,debug 包含了众多子包,都是跟调试相关。
debug/buildinfo
https://pkg.go.dev/debug/buildinfo 不直接使用此包,此包提供二进制的功能,由 runtime/debug 来调用。
debug/dwarf
https://pkg.go.dev/debug/dwarf
import "debug/dwarf"
用于解析 DWARF 调试信息,DWARF 调试信息包含了程序的源代码、变量、函数、类型等相关信息,可以帮助调试器进行源代码级别的调试。
debug/elf
https://pkg.go.dev/debug/elf
import "debug/elf"
用于解析 ELF 可执行文件格式,
debug/gosym
https://pkg.go.dev/debug/gosym
import "debug/gosym"
debug/gosym 用于解析 Go 语言程序的符号表信息。
debug/macho
https://pkg.go.dev/debug/macho
import "debug/macho"
debug/macho 用于解析 Mach-O 格式的可执行文件
debug/pe
https://pkg.go.dev/debug/pe
import "debug/pe"
debug/pe 用于解析 PE 格式的可执行文件
debug/plan9obj
https://pkg.go.dev/debug/plan9obj
import "debug/plan9obj"
debug/plan9obj 用于解析 Plan 9 object 文件格式。
embed
https://pkg.go.dev/embed
import _ "embed"
//go:embed hello.text
mbed 是 Go 语言自 1.16 版本引入的一个标准库,用于将静态文件嵌入到 Go 代码中。
通过 embed 包,我们可以将静态文件 (如文本文件、JSON 文件、HTML 文件、图像文件等) 直接嵌入到 Go 代码中,而无需将文件作为独立的资源文件放在磁盘上。这样做的好处是,可以将所有的资源文件打包到可执行文件中,方便分发和部署。
将一个文件嵌入到一个 string 中
package main
import _ "embed"
// 这里的注释开头没有空格,这是 go 的自有命令注释;//go:xx
//
//go:embed hello.txt
var s string
func main() {
print(s)
}
将一个文件嵌入到文件系统中
package main
import (
"embed"
"fmt"
)
//go:embed hello.txt
var helloFile embed.FS
func main() {
content, err := helloFile.ReadFile("hello.txt")
if err != nil {
fmt.Println("无法读取文件:", err)
return
}
fmt.Println(string(content))
}
encoding
https://pkg.go.dev/encoding 使用时,不直接使用 encoding,除非你想亲自实现某个编码的加解码
encoding 是 Go 语言标准库中的一个包,用于处理数据的编码和解码。
encoding 包提供了许多子包,每个子包都专门用于处理特定的数据编码格式
- encoding/json:用于处理 JSON 数据的编码和解码。
- encoding/xml:用于处理 XML 数据的编码和解码。
- encoding/csv:用于处理 CSV (逗号分隔值) 数据的编码和解码。
- encoding/base64:用于进行 base64 编码和解码。
- encoding/hex:用于进行十六进制编码和解码。
- encoding/gob:用于进行 Go 对象的编码和解码。
encoding/ascii85
https://pkg.go.dev/encoding/ascii85
import "encoding/ascii85"
encoding/ascii85 用于进行 ASCII85 编码和解码
encoding/asn1
https://pkg.go.dev/encoding/asn1
import "encoding/asn1"
encoding/asn1 用于进行 ASN.1 (Abstract Syntax Notation One) 编码和解码。
encoding/base32
https://pkg.go.dev/encoding/base32
import "encoding/base32"
encoding/base64
https://pkg.go.dev/encoding/base64
import "encoding/base64"
encoding/base32 用于进行 Base32 编码和解码
encoding/binary
https://pkg.go.dev/encoding/binary
import "encoding/binary"
encoding/base64 用于进行 Base64 编码和解码。
encoding/csv
https://pkg.go.dev/encoding/csv
import "encoding/csv"
encoding/csv 用于处理 CSV (逗号分隔值) 格式的数据。
encoding/gob
https://pkg.go.dev/encoding/gob
import "encoding/gob"
encoding/gob 用于将 Go 的值编码为二进制格式,并进行序列化和反序列化。
encoding/hex
https://pkg.go.dev/encoding/hex
import "encoding/hex"
十六进制编码将二进制数据编码为十六进制字符串,每个字节对应两个十六进制字符。十六进制编码通常用于将二进制数据转换为可打印的 ASCII 字符串,例如在 URL 参数中传递二进制数据或在文本文件中嵌入二进制数据。
encoding/hex 包提供了一组函数和类型,用于进行十六进制编码和解码。主要有两个函数:EncodeToString 和 DecodeString。
encoding/json
https://pkg.go.dev/encoding/json
import "encoding/json"
encoding/json 用于对 JSON (JavaScript Object Notation) 格式的数据进行编码和解码操作。
JSON 是一种常用的数据交换格式,用于在不同平台和编程语言之间传输和存储数据。JSON 数据由键值对组成,可以表示复杂的数据结构和层次关系。
encoding/pem
https://pkg.go.dev/encoding/pem
import "encoding/pem"
encoding/pem 用于对 PEM (Privacy-Enhanced Mail) 格式的数据进行编码和解码操作。
PEM 是一种常用的文本格式,用于在非文本环境中传输和存储密钥、证书等数据。PEM 格式使用 ASCII 字符表示二进制数据,通常以 “-----BEGIN…” 和 “-----END…” 标记来标识不同类型的数据。
encoding/xml
https://pkg.go.dev/encoding/xml
import "encoding/xml"
encoding/xml 用于对 XML (eXtensible Markup Language) 格式的数据进行编码和解码操作。
XML 是一种常用的文本格式,用于存储和传输结构化的数据。XML 数据由标签、属性和文本内容组成,可以表示复杂的数据结构和层次关系。