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

目录
相关文章
初识go变量,使用var和:=来声明变量,声明变量的三种方式
这篇文章介绍了Go语言中使用`var`和`:=`声明变量的三种不同方式,包括声明单个或多个变量、通过值确定数据类型以及在函数体内使用`:=`声明局部变量。
初识go变量,使用var和:=来声明变量,声明变量的三种方式
|
4月前
|
Go 索引
internal\model\data_support.go:17:10: cannot use _ as value or type
internal\model\data_support.go:17:10: cannot use _ as value or type
|
8月前
|
JavaScript 前端开发 NoSQL
go embed 实现gin + vue静态资源嵌入
go embed 实现gin + vue静态资源嵌入
532 0
|
编译器 Go
Go语言变量声明完全手册 var的用法一文掌握
Go语言变量声明完全手册 var的用法一文掌握
118 0
Go语言变量声明完全手册 var的用法一文掌握
|
Go
go包embed的基本使用|Go主题月
首先在项目下建立一个static文件夹(当然名字随意命名,没有规定),然后在下面创建几个文件,分别在文件里填入我是s1/s2/s3文件里的具体如下目录结构
434 0
|
安全 Unix Go
go1.16新特性-embed包|Go主题月
embed是go 1.16新引入的包,能够把静态文件和go文件一起编译成二进制文件。使我们能够更好的进行web的开发。没有这个包之前我们一般用go-bindata或go-bindata-assetfs先把静态文件编译成go文件,然后再用go命令编译成二进制文件,过程比较繁琐。现在官方提供了embed这个包后,可以直接通过一行命令(//go:embed)来导入静态文件,然后go命令编译时会把导入的静态文件也一起编译成二进制文件。
160 0
|
Go PHP
【GO】panic: reflect.Value.Interface: cannot return value obtained from unexported field or method
【GO】panic: reflect.Value.Interface: cannot return value obtained from unexported field or method
506 0
【GO】panic: reflect.Value.Interface: cannot return value obtained from unexported field or method
|
Go 开发工具
Go1.13:使用go mod 管理依赖, 提示cannot find module providing package或cannot find main module
Go1.13:使用go mod 管理依赖, 提示cannot find module providing package或cannot find main module
671 0
Go1.13:使用go mod 管理依赖, 提示cannot find module providing package或cannot find main module
|
存储 Java 测试技术
面试题:Go 1.15 中 var i interface「」 = 3
  说明:题目是这样的   var in int = 3   // 以下有额外内存分配吗?   var i interface{} = i   在 Go 中,接口被实现为一对指针(请参阅 Russ Cox 的 Go 数据结构:接口[1]):指向有关类型信息的指针和指向值的指针。可以简单的表示为:   type iface struct {   tab *itab   data unsafe.Pointer   }   其中 tab 是指向类型信息的指针;data 是指向值的指针。因此,一般来说接口意味着必须在堆中动态分配该值。   然而,Go 1.15 发行说明[2]在 r
135 0
|
8天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
44 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用