首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每日一库:embed

每日一库:embed

作者头像
孟斯特
发布于 2023-10-19 08:50:27
发布于 2023-10-19 08:50:27
30700
代码可运行
举报
文章被收录于专栏:code人生code人生
运行总次数:0
代码可运行

go embed 是 Go 1.16 中引入的特性,它允许将文件嵌入到 Go 代码中,以便在运行时访问这些文件。这对于将静态资源(如 HTML、CSS、JavaScript 文件)直接嵌入到 Go 二进制文件中,以及简化文件分发和部署非常有用。下面是关于 go embed 的详细介绍:

使用方式

go embed 支持将文件嵌入到代码中的两种方式:

嵌入单个文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
    _ "embed"
    "fmt"
)

//go:embed myfile.txt
var content string

func main() {
    fmt.Println(content)
}

嵌入多个文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
    _ "embed"
    "fmt"
)

//go:embed file1.txt file2.txt
var content string

func main() {
    fmt.Println(content)
}

使用步骤

  1. 导入 _ "embed" 包,这样 embed 包就会被初始化。
  2. 在变量声明前使用 //go:embed 注释,指定要嵌入的文件。你可以指定单个文件,也可以指定多个文件,用空格分隔。

访问嵌入文件

使用 embed 包嵌入的文件是一个 string[]byteembed.FS 类型的变量,你可以直接在代码中访问它们。在运行时,这些变量会被初始化为嵌入文件的内容。

用途

  • 将静态资源嵌入到 Go 二进制文件中,以便简化部署。
  • 将配置文件或其他数据文件嵌入到应用程序中,无需外部文件依赖。
  • 减少文件的分发和管理成本。

注意事项

  • 嵌入的文件内容会在编译时打包到二进制文件中,因此可能会增加二进制文件的大小。
  • 嵌入的文件内容是只读的,无法在运行时修改。
  • 嵌入文件的大小应适度,避免过大导致二进制文件过大。
  • //go:embed 指令只能用于全局变量,不能用于函数内的局部变量。同时,它只能嵌入在 Go 源代码文件同一目录或子目录下的文件或目录。

总之,go embed 是一个强大的特性,使得在 Go 代码中嵌入文件变得更加方便和简单,特别是在需要将静态资源或配置文件包含在应用程序中时。

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。 Author: mengbin blog: mengbin Github: mengbin92 cnblogs: 恋水无意

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 孟斯特 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go 语言 | 1.16 新增的embed在各流行Web框架中的应用
在前几天刚发布的Golang 1.16版本中,新增了一个大家期待已久的特性//go:embed,它的作用就是可以在Go语言应用程序中包含任何文件、目录的内容,也就是说我们可以把文件以及目录中的内容都打包到生成的Go语言应用程序中了,部署的时候,直接扔一个二进制文件就可以了,不用再包含一些静态文件了,因为它们已经被打包到生成的应用程序中了。
飞雪无情
2021/03/03
3.4K0
go-zero v1.8.4发布!内嵌文件服务、持续性能剖析全面升级,性能提升超出预期!
在现代微服务架构和云原生应用高速发展的时代,框架的性能与功能往往成为开发者选择的重要因素。作为国产优秀的Go微服务框架,go-zero自发布以来持续更新迭代,不断引入创新特性和优化细节,受到广大开发者的青睐。2025年6月9日,go-zero发布了v1.8.4版本,带来了多项重磅更新,尤其是嵌入式文件服务器的支持和持续性能剖析的上线,以及切片和哈希的性能优化,让这次升级备受关注。
福大大架构师每日一题
2025/06/11
2190
go-zero v1.8.4发布!内嵌文件服务、持续性能剖析全面升级,性能提升超出预期!
Go内嵌静态资源
最常见的,比如一个混编网址的后端程序,本来需要把程序与它所需要的静态资源(html模版、css、js、图片)一起上传至生产服务器,同时还需要正确配置静态资源在服务器中的路径让程序能正常访问.现在我们将这些资源全部嵌入到程序中,部署的时候只需要部署一个二进制文件,配置也只针对这个程序本身,部署的流程大大简化.
mousemin
2023/06/10
8540
Go内嵌静态资源
Go 学习:从环境搭建到写一个 Web 服务
和 C、C++ 相比, Go 是一门很年轻的语言。2007 年,在 Google 的内部,有三位大佬因为 C++ 的复杂性、构建编译速度很慢和对并发支持不好等原因,便决定开发一门新的语言,于是他们基于 C 语言,做了功能的删减和新增,便有了 Go 的诞生。
oec2003
2022/12/01
8510
Go 学习:从环境搭建到写一个 Web 服务
《Go小技巧&易错点100例》第三十六篇
在 Go 语言开发中,进程诊断和性能分析是保障服务稳定性的关键环节。Google 开源的 gops [https://github.com/google/gops] 工具为开发者提供了一套轻量级的诊断解决方案,无需侵入代码即可快速获取运行时的关键指标。
闫同学
2025/06/09
680
《Go小技巧&易错点100例》第三十六篇
泛型简介
Go语言的泛型是在Go 1.18版本中引入的一个新特性,它允许开发者编写可以处理不同数据类型的代码,而无需为每种数据类型都编写重复的代码。以下是关于Go语言泛型的一些关键点:
孟斯特
2023/10/16
1940
泛型简介
每日一库:sonic
sonic是一个由字节跳动开发并开源的 JSON 解析库,由 JIT (即时编译)和 SIMD (单指令流多数据流)来加速序列化/反序列化。
孟斯特
2023/10/16
7590
每日一库:sonic
Go 1.16新特性-embed包及其使用
embed是在Go 1.16中新加包。它通过//go:embed指令,可以在编译阶段将静态资源文件打包进编译好的程序中,并提供访问这些文件的能力。
Go学堂
2023/01/31
1.1K0
每日一库:Prometheus
Prometheus 是一个开源的系统监控和警报工具,最初由 SoundCloud 开发,并于 2012 年发布为开源项目。它是一个非常强大和灵活的工具,用于监控应用程序和系统的性能,并根据预定义的规则触发警报。以下是对 Prometheus 的详细介绍:
孟斯特
2023/10/19
3490
每日一库:Prometheus
Go 1.16版本正式发布,速览新版本中的几个重要更新
2021年2月16日,继1.15版本发布6个月后,Go 1.16版本正式发布。下面来看看Go 1.16版本中几个重要的特性。
Go学堂
2023/01/31
6000
每日一库:JWT
JWT(JSON Web Token)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为 JSON 对象。这种信息可以被验证和信任,因为它是数字签名的。
孟斯特
2023/10/16
3470
每日一库:JWT
每日一库:Wire - 依赖注入框架
Wire是一个适用于Go语言的依赖注入(DI)框架,它旨在简化和改进Go应用程序中的依赖管理。它使用代码生成来自动创建依赖项,并通过简单的DSL(领域特定语言)来描述依赖项之间的关系。通过使用Wire,你可以减少手动编写依赖注入代码的工作量,并提高代码的可维护性和可测试性。
孟斯特
2023/10/16
5060
每日一库:Wire - 依赖注入框架
Go程序例子(70):Embed
//go:embed 是一个编译器指令,允许程序在构建时将任意文件和文件夹包含到 Go 二进制文件中。你可以在这里阅读更多关于 embed 指令的内容。
用户11078756
2025/01/20
1780
Go程序例子(70):Embed
Go之embed指令嵌入静态文件到二进制包
路径里面不能包含 . .. 这种相对路径的符号否则报错 , 也不能以/ 开头
IT工作者
2021/12/20
1.2K0
Go 1.16 相比 Go 1.15 有哪些值得注意的改动?
Go 1.16 在 Go 1.15 的基础上带来了不少重要的更新和改进。以下是一些值得关注的改动要点:
Piper破壳
2025/04/26
1550
Go1.13-1.20语言特性
Go 遵循每 6 个月发布一个大版本的规律,最新版本是 Go1.20发布于 2023/01/01 Go 的每个版本围绕 “语言特性”,“工具链”,“Runtime”,“Compiler”, “Linker”, “Library” 这几个方面进行大量的迭代。 由于内容很多,本文打算总结研发过程中可能会关注到语言特性的改进,并使用一些case 对新的语言特性进行解释。
COY_fenfei
2023/06/12
1.1K0
Go1.13-1.20语言特性
每日一库:cmp
Ordered 是一个约束,它允许任何有序类型:任何支持 <、<=、>=、> 运算符的类型。如果 Go 的未来版本添加了新的有序类型,这个约束将被修改以包含它们。
孟斯特
2023/10/19
4000
每日一库:cmp
知识分享之Golang——使用embed包实现静态资源打包至二进制文件中
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
cn華少
2022/04/02
8260
知识分享之Golang——使用embed包实现静态资源打包至二进制文件中
go1.16来啦
最新的Go版本1.16版在Go 1.15之后六个月到货。它的大部分更改是在工具链,运行时和库的实现中进行的。与往常一样,该版本保留了Go 1兼容性的承诺。作为Go编程语言的第17个主要版本Go 1.16。这是一项重大升级,为语言带来了许多期待已久的功能和改进。默认情况下,启用模块感知模式,Apple silicon支持实时可用,静态资源可以嵌入到二进制文件中,并且io / ioutil软件包中的方法已重新组织,因此现在具有逻辑意义。在本文中,我们将介绍此版本中的一些重点内容。
用户3904122
2022/06/29
8820
go1.16来啦
Go 1.22 is released!
Go 1.22 带来了一系列重要的新功能和提升。以下是一些值得注意的变化;有关完整列表,请参阅发布[3]说明。
孟斯特
2024/02/21
3430
Go 1.22 is released!
相关推荐
Go 语言 | 1.16 新增的embed在各流行Web框架中的应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验