golang embed 含义及用法

 

golang embed 包的主要功能是在运行时提供对嵌入到 Go 程序中的文件的访问。

使用 embed 包,Go源文件可以通过使用 //go:embed 指令来将文件的内容初始化为字符串、字节切片或 FS 类型。

这样可以在运行时直接访问这些文件的内容。

以下是使用 embed 包的三个示例:

 

  1. 将一个文件嵌入为字符串:

import _ "embed"

//go:embed hello.txt
var s string
print(s)

 

  2. 将一个文件嵌入为字节切片:   

import _ "embed"

//go:embed hello.txt
var b []byte
print(string(b))

 

  3. 将一个或多个文件嵌入为文件系统:  

import "embed"

//go:embed hello.txt
var f embed.FS
data, _ := f.ReadFile("hello.txt")
print(string(data))

 

package server

import "embed"

// content holds our static web server content.
//go:embed image/* template/*
//go:embed html/index.html
var content embed.FS

 

//go:embed 指令用于指定要嵌入的文件,使用路径匹配模式。

该指令必须位于变量声明的前面,并且只能在变量声明前存在空行或以 // 开头的行注释。

变量的类型可以是字符串类型字节切片类型 或 FS 类型(或 FS 类型的别名)。

 

如果指定的模式匹配目录,则该目录下的所有文件(除了以 或 开头的文件)都会被嵌入到变量中。

如果模式以 all: 前缀开头,则会包含以 或 开头的文件。

 

对于字符串 和 字节切片类型的变量,//go:embed 指令只能指定一个模式,并且该模式只能匹配一个文件。变量将被初始化为该文件的内容。

embed 包中的 FS 类型可以用于嵌入文件树,例如静态 web 服务器内容的目录。

FS 类型实现了 io/fs 包中的 FS 接口,因此可以与任何支持文件系统的包一起使用,如 net/httptext/template 和 html/template

为了支持分析 Go 包的工具,//go:embed 指令中指定的模式可以在 go list 输出中找到。

 

Link:https://www.cnblogs.com/farwish/p/18268013

posted on 2024-06-25 23:13  ercom  阅读(72)  评论(0编辑  收藏  举报