目 录CONTENT

文章目录

Golang Embed 嵌入

Sakura
2024-05-15 / 0 评论 / 2 点赞 / 61 阅读 / 2916 字 / 正在检测是否收录...

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("--------------")
	}
}

2

评论区