首页 > 其他分享 >go: embed

go: embed

时间:2024-03-27 20:11:41浏览次数:30  
标签:文件 嵌入 FS version go embed

go: embed

go:embed​ 是 Go 语言在其 1.16 版本中引入的一个新功能,它允许开发者在编译时将文件或文件夹嵌入到 Go 程序中。这样做可以简化资源文件的分发,因为它们会被编译到可执行文件里,避免了在运行时需要处理文件路径和分发额外文件的问题。

要使用 go:embed​,你需要做以下几步:

  1. 导入 embed​ 包。
  2. 使用 //go:embed​ 指令来标记要嵌入的文件或文件夹。
  3. 声明一个变量来接收嵌入的内容,类型可以是 string​、[]byte​ 或 embed.FS​(用于目录或多个文件)。

下面是一个使用 go:embed​ 的示例:

package main

import (
    "embed"
    "io/fs"
    "io/ioutil"
    "log"
    "net/http"
)

//go:embed version.txt
var version string

//go:embed config.json
var config []byte

//go:embed static
var staticFiles embed.FS

func main() {
    // 使用嵌入的字符串
    log.Println("Version:", version)

    // 使用嵌入的字节切片
    configContents, err := ioutil.ReadAll(fs.FS(config))
    if err != nil {
        log.Fatal(err)
    }
    log.Println("Config:", string(configContents))

    // 使用嵌入的文件系统
    http.Handle("/", http.FileServer(http.FS(staticFiles)))
    log.Fatal(http.ListenAndServe(":8080", nil))
}

在上面的代码中:

  • version.txt​ 文件的内容会被嵌入到 version​ 变量中,类型为 string​。
  • config.json​ 文件的内容会被嵌入到 config​ 变量中,类型为 []byte​。
  • static​ 目录及其内容会被嵌入到 staticFiles​ 变量中,类型为 embed.FS​。

请注意,使用 go:embed​ 的文件或目录必须在同一个包中。此外,go:embed​ 只能用于全局变量,且这些变量不能是导出的(即变量名不能以大写字母开头),除非它们是用来嵌入的类型(string​、[]byte​、embed.FS​)。

在运行 go build​ 编译程序时,Go 编译器会处理这些指令,并将指定的文件或目录内容嵌入到最终的可执行文件中。

标签:文件,嵌入,FS,version,go,embed
From: https://www.cnblogs.com/pDJJq/p/18100130/go-embed-7g7du

相关文章

  • RestCloud数据集成平台-监听SqlServer数据库表,并同步数据到MongoDB数据库表详细教程(实
    上一篇:RestCloud数据集成平台-Windows全量包安装部署详细教程1.数据源管理数据源主要用来建立与用户的数据库的链接。数据源管理主要用来对用户添加的所有数据链接进行管理,主要包括新建数据源、测试链接、修改链接、复制链接、查询链接和删除链接等功能。1.1.创建链接......
  • go判断实现接口的方法 var _ Interface = (*Type)(nil)
    阅读源码过程中发现很多var_Interface=(*Type)(nil)写法,对于接口实现情况的判断十分优雅,而自己编写代码过程中鲜有涉及。var_InnerObjectWithSelector=(*PodChaos)(nil)var_InnerObject=(*PodChaos)(nil)其作用就是用来检测*Type是否实现了Interface接口,有多种形......
  • Android Zygote 启动流程
    Zygote进程介绍介绍在Android中,DVM、ART、和应用程序进程以及系统关键服务的SystemServer进程都是由Zygote进程创建,它被称为孵化器通过fork方式,创建应用程序进程和SystemServer进程,由于Zygote进程在启动的时候会创建DVM或者ART,因为通过fork而创建的应用程序......
  • 每日一题 --- 数组中的第 K 个最大元素[力扣][Go]
    数组中的第K个最大元素题目:数组中的第K个最大元素给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。示例1:输入:[3,2,1,5,6,4]和k=2输出:5示例2:输入:[3,2,3,1,2......
  • MongoTemplate基本使用
    分页/***mongo分页*/@TestpublicvoidtestPage(){intpageSize=10;intcurrentNo=0;Queryquery=newQuery();query.addCriteria(Criteria.where("username").is("小明"));longcount=mongoTemplate.count(query,User.class);longtot......
  • Mongo Db 增删改查
    db.mycol.find().pretty()//查询格式化showdbs;//查询所有数据库uselocal;//使用local数据库showcollections;//查询当前数据库中所有集合//查询数据库db.getCollection("ab").find();db.movie.insertOne({"name":"adoglife"});db.movie.insertMany([{"name&quo......
  • Mongo Db基本查询
    gt:大于gte:大于等于lt:小于lte:小于等于SQL查询语句MongoDBfind()语句SELECT*FROMusersdb.users.find()SELECTid,user_id,statusFROMusersdb.users.find({},{user_id:1,status:1})SELECTuser_id,statusFROMusersdb.users.find({},{......
  • 【go从入门到精通】函数详解
    作者简介:    高科,先后在 IBMPlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢你的关注)---------------......
  • 使用K8S集群运行MongoDB7.0
    参考:https://hub.docker.com/_/mongo创建PVC创建PVC用于数据持久化#catmongodb-pvc.yamlapiVersion:v1kind:PersistentVolumeClaimmetadata:name:mongodb-pvcspec:accessModes:-ReadWriteOnceresources:requests:storage:22Gistorag......
  • 中国国内怎么使用订阅升级Duolingo多邻国plus?多邻国使用教程
    多邻国Duolingo合租平台,环球巴士首单9折优惠码:110072多邻国Duolingo是什么,能用来做什么?众所周知,多邻国考试的性价比非常高,不仅考试时间短,出分也很快,国际认可度越来越高。不过要注意的是,虽然相比托福和雅思,多邻国的考试难度有所降低,但依旧需要同学们投入大量时间和精力备考,想要......