本文最后更新于 2021年05月31日 已经是 849天前了 ,文章可能具有时效性,若有错误或已失效,请在下方留言。
废弃ioutil
- Golang1.16已经标记
io/ioutil
为废弃,其函数被转移到了os和io这两个包里
embed
import (
"embed"
...
)
//go:embed Web/dist/spa
var staticFs embed.FS
...
func main() {
...
fads, _ := fs.Sub(staticFs, "Web/dist/spa")
app.HandleDir("/", http.FS(fads))
...
// 说明
//go:embed images
这是匹配所有位于/tmp/proj/images及其子目录中的文件
//go:embed images/jpg/a.jpg
匹配/tmp/proj/images/jpg/a.jpg这一个文件
//go:embed a.txt
匹配/tmp/proj/a.txt
//go:embed images/jpg/*.jpg
匹配/tmp/proj/images/jpg下所有.jpg文件
//go:embed images/jpg/a?.jpg
匹配/tmp/proj/images/jpg下的a1.jpg a2.jpg ab.jpg等
//go:embed images/??g/*.*
匹配/tmp/proj/images下的jpg和png文件夹里的所有有后缀名的文件,例如png/123.png jpg/a.jpeg
//go:embed *
直接匹配整个/tmp/proj
//go:embed a.txt
//go:embed *.png *.jpg
//go:embed aa.jpg
可以指定多个//go:embed指令行,之间不能有空行,也可以用空格在一行里写上对个模式匹配,表示匹配所有这些文件,相当于并集操作
可以包含重复的文件或是模式串,golang对于相同的文件只会嵌入一次,很智能
io/fs (大更新)
Go’s and interfaces, along with and its analogs, go a long way in abstracting common operations on opened files. However, until now there hasn’t been a great story for abstracting an entire filesystem.io.Readerio.Writeros.File
Why might you want to do this? Well, the most common motivating use-case I’ve encountered is being able to mock a filesystem in a test.
io/fs是模仿Linux的vfs
做一套基于fs的io接口,embed
也是依赖于他哟~
数据类型
fs包中主要包含了下面几种数据类型(都是接口类型)
名称 | 作用 |
---|---|
FS | 文件系统的抽象,有一个Open方法用来从FS打开获取文件数据 |
DirEntry | 描述目录项目(包含目录自身)的数据结构 |
File | 描述文件数据的结构,包含Stat,Read,Close方法 |
ReadDirFile | 在File的基础上支持ReadDir,可以代表目录自身 |
FileMode | 描述文件类型,比如是通常文件还是套接字或者是管道 |
FileInfo | 文件的元数据,例如创建时间等 |
其他
- 相对路径导入不在被允许
- 支持
darwin/arm64
平台