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和:=来声明变量,声明变量的三种方式
|
2月前
|
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
|
6月前
|
JavaScript 前端开发 NoSQL
go embed 实现gin + vue静态资源嵌入
go embed 实现gin + vue静态资源嵌入
447 0
|
编译器 Go
Go语言变量声明完全手册 var的用法一文掌握
Go语言变量声明完全手册 var的用法一文掌握
103 0
Go语言变量声明完全手册 var的用法一文掌握
|
Go
go包embed的基本使用|Go主题月
首先在项目下建立一个static文件夹(当然名字随意命名,没有规定),然后在下面创建几个文件,分别在文件里填入我是s1/s2/s3文件里的具体如下目录结构
419 0
|
安全 Unix Go
go1.16新特性-embed包|Go主题月
embed是go 1.16新引入的包,能够把静态文件和go文件一起编译成二进制文件。使我们能够更好的进行web的开发。没有这个包之前我们一般用go-bindata或go-bindata-assetfs先把静态文件编译成go文件,然后再用go命令编译成二进制文件,过程比较繁琐。现在官方提供了embed这个包后,可以直接通过一行命令(//go:embed)来导入静态文件,然后go命令编译时会把导入的静态文件也一起编译成二进制文件。
152 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
485 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
644 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
128 0
|
5天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
23 2