Golang Embed 嵌入
注意:
go:embed
只能用于包级别的变量,无法在函数中使用
1. 嵌入字符串
package main
import (
_ "embed"
"fmt"
)
//go:embed Sakura.txt
var data string
func main() {
fmt.Println(data)
}
代码编译之后,文件删除或者改名都不会影响结果
2. 嵌入字节切片
package main
import (
_ "embed"
"fmt"
)
//go:embed Sakura.txt
var data []byte
func main() {
fmt.Println(string(data))
}
3. 嵌入文件系统
直接嵌入到文件系统
3.1 嵌入单个文件
import (
"embed"
_ "embed"
"fmt"
)
//go:embed Sakura.txt
var data embed.FS
func main() {
file, err := data.ReadFile("Sakura.txt")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(file))
}
3.2 嵌入多个文件
import (
"embed"
_ "embed"
"fmt"
)
//go:embed Sakura.txt Sakurasss.txt
var data embed.FS
func main() {
file, err := data.ReadFile("Sakura.txt")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(file))
file2, err := data.ReadFile("Sakura.txt")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(file2))
}
3.3 嵌入整个目录
func main() {
dir, err := data.ReadDir("dir")
if err != nil {
fmt.Println(err)
return
}
for i, file := range dir {
fmt.Printf("第%d个文件的是:%s \n", i, file.Name())
fmt.Println(file.Info())
readDir, err := data.ReadFile(path.Join("dir", file.Name()))
if err != nil {
fmt.Println(err)
return
}
fmt.Println("文件内容:")
fmt.Println(string(readDir))
fmt.Println("--------------")
}
}
评论区