go包embed的基本使用|Go主题月

954 阅读1分钟

基本使用示例

首先在项目下建立一个static文件夹(当然名字随意命名,没有规定),然后在下面创建几个文件,分别在文件里填入我是s1/s2/s3文件里的具体如下目录结构

导入为string

package main

import (
	_ "embed"
	"fmt"
)

//go:embed static/s1.txt
var content string
func main() {
	fmt.Printf("静态文件内容:%s\n",content)
}

输出:

静态文件内容:我是s1文件里的

导入为[]byte

package main

import (
	_ "embed"
	"fmt"
)

//go:embed static/s1.txt
var content []byte
func main() {
	fmt.Printf("静态文件内容:%s\n",string(content))
}

输出:

静态文件内容:我是s1文件里的

导入为FS文件系统

Open方法

package main

import (
	"embed"
	"fmt"
)

//go:embed static
var content embed.FS
func main() {
	// 打开FS文件系统下路径为`static/s1.txt`的文件
	file,err:=content.Open("static/s1.txt")
	defer file.Close()
	if err != nil {
		fmt.Println(err)
	}

    // 读取File的数据
	var c = make([]byte,30)
	l,err:=file.Read(c)

	fmt.Printf("Open的内容:%s\n",c)
	fmt.Printf("Open读取的内容长度:%d\n",l)
}

输出:

Open的内容:我是s1文件里的
Open读取的内容长度:20

ReadDir方法

package main

import (
	"embed"
	"fmt"
)

//go:embed static
var content embed.FS
func main() {
	// 打开文件
	files,err:=content.ReadDir("static")
	if err != nil {
		fmt.Println(err)
	}
	for _,f:=range files{
		fmt.Printf("文件名:%s\n",f.Name())
		fmt.Print("是否是文件夹:")
		fmt.Println(f.IsDir())
		fileInfo,_:=f.Info()
		fmt.Printf("文件权限:%s\n",fileInfo.Mode())
		fmt.Println("--------------------------------------")
	}
}

输出:

文件名:s1.txt
是否是文件夹:false
文件权限:-r--r--r--
--------------------------------------
文件名:s2.txt
是否是文件夹:false
文件权限:-r--r--r--
--------------------------------------
文件名:s3.txt
是否是文件夹:false
文件权限:-r--r--r--
--------------------------------------

ReadFile方法

package main

import (
	"embed"
	"fmt"
)

//go:embed static
var content embed.FS
func main() {
	c2,_:=content.ReadFile("static/s1.txt")
	fmt.Printf("ReadFile内容:%s\n",c2)
}

输出:

ReadFile内容:我是s1文件里的