ChatGPT 告诉你解决方案
解决办法
这个错误的原因是,go:embed
只能用于在包级别声明的变量,而不能用于在函数内声明的变量。
因为 go:embed
是一种编译时的指令,它需要在编译时确定要嵌入的文件或目录。在函数内声明的变量在编译时是未知的,因此无法将它们用于 go:embed。
要解决这个问题,你可以将需要嵌入的文件或目录声明为包级别的变量。例如:
Copy code package main import ( "embed" "fmt" ) //go:embed hello.txt var helloTxt string func main() { fmt.Println(helloTxt) }
在这个例子中,hello.txt 文件被声明为包级别的变量 helloTxt,因此可以在 main 函数中使用。注意,在使用 go:embed 时,变量的类型应该是 embed.FS,而不是字符串类型。
如果你需要嵌入一个目录,可以像这样声明一个包级别变量:
Copy code //go:embed static/* var staticFS embed.FS
这将会嵌入 static 目录及其所有内容。