go:embed cannot apply to var inside【已解决】

简介: go:embed cannot apply to var inside【已解决】

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 目录及其所有内容。

目录
相关文章
|
2月前
|
JavaScript 前端开发 NoSQL
go embed 实现gin + vue静态资源嵌入
go embed 实现gin + vue静态资源嵌入
196 0
go包embed的基本使用|Go主题月
首先在项目下建立一个static文件夹(当然名字随意命名,没有规定),然后在下面创建几个文件,分别在文件里填入我是s1/s2/s3文件里的具体如下目录结构
393 0
|
安全 Unix Go
go1.16新特性-embed包|Go主题月
embed是go 1.16新引入的包,能够把静态文件和go文件一起编译成二进制文件。使我们能够更好的进行web的开发。没有这个包之前我们一般用go-bindata或go-bindata-assetfs先把静态文件编译成go文件,然后再用go命令编译成二进制文件,过程比较繁琐。现在官方提供了embed这个包后,可以直接通过一行命令(//go:embed)来导入静态文件,然后go命令编译时会把导入的静态文件也一起编译成二进制文件。
135 0
|
10天前
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
7天前
|
Go
go语言map、实现set
go语言map、实现set
13 0
|
7天前
|
Go
go语言数组与切片
go语言数组与切片
16 0
|
1天前
|
存储 Go API
一个go语言编码的例子
【7月更文挑战第2天】本文介绍Go语言使用Unicode字符集和UTF-8编码。Go中,`unicode/utf8`包处理编码转换,如`EncodeRune`和`DecodeRune`。`golang.org/x/text`库支持更多编码转换,如GBK到UTF-8。编码规则覆盖7位至21位的不同长度码点。
62 1
一个go语言编码的例子
|
4天前
|
JSON 算法 测试技术
在go语言中调试程序
【6月更文挑战第29天】Go语言内置`testing`包支持单元测试、基准测试和模糊测试。`go test`命令可执行测试,如`-run`选择特定测试,`-bench`运行基准测试,`-fuzz`进行模糊测试。
16 2
在go语言中调试程序
|
10天前
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
106 5
在go语言服务中封装路由和示例
|
2天前
|
安全 Go
Go语言的iota关键字有什么用途?
**Go语言中的`iota`是常量生成器,用于在`const`声明中创建递增的常量。`iota`在每个新的`const`块重置为0,然后逐行递增,简化了枚举类型或常量序列的定义。例如,定义星期枚举:** ```markdown ```go type Weekday int const ( Sunday Weekday = iota // 0 Monday // 1 Tuesday // 2 ... ) ``` 同样,`iota`可用于定义不同组的常量,如状态码和标志位,保持各自组内的递增,提高代码可读性。