前言
embed//go:embed
Go 1.16 还添加了 macOS ARM64 的支持(也称为 Apple silicon)。对于苹果新发布的 M1 芯片的 Mac 感兴趣的读者,可以放心购买了。
请注意,Go 1.16 默认需要使用 Go Modules,现在,根据 Go 官方的 2020 Go 开发人员调查,96% 的 Go 开发人员已经切换到了 Go Modules。
Go 1.16 还有许多其他改进和错误修复,包括编译速度提升高达 25% 且内存减少 15%。
embed
更新历史
2021 年 02月 18日 - 初稿
//go:embed
//go:embedembed_embed
io/fsnet/httptext\templatehtml\template
字符串类型模式示例代码:
1
2
//go:embed hello.txt
var s string
字节类型切片模式示例代码:
1
2
//go:embed hello.txt
var b []byte
FS 类型模式示例代码:
1
2
//go:embed hello.txt
var f embed.FS
//go:embed
//
//go:embed
//go:embed
//go:embed//go:embed...*.
//go:embed
//go:embed//go:embed
FS 是只读值,因此, 可以安全地同时从多个 go 协程使用, 并且安全地将 FS 类型的值分配给对方。
1
2
3
type FS struct {
// contains filtered or unexported fields
}
FS 类型包含三个方法,分别是 Open,ReadDir 和 ReadFile。
- func (f FS) Open(name string) (fs.File, error) 打开要读取的命名文件,并作为 fs.File 返回它。
- func (f FS) ReadDir(name string) ([]fs.DirEntry, error) 读取并返回整个命名目录。
- func (f FS) ReadFile(name string) ([]byte, error) 读取并返回命名文件的内容。
ReadFile 方法的示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
import (
"embed"
"fmt"
)
//go:embed hello.txt
var f embed.FS
func main () {
bs, err := f.ReadFile("hello.txt")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(bs)
}
总结
embed//go:embedembed//go:embed
embed/usr/local/go/src/embed/embed.go