千家信息网

如何使用Go1.16的新特性

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,本篇内容介绍了"如何使用Go1.16的新特性"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!无法将静态
千家信息网最后更新 2025年11月13日如何使用Go1.16的新特性

本篇内容介绍了"如何使用Go1.16的新特性"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

无法将静态资源编译打包进二进制文件的话,通常会有两种解决方法:

  • 第一种是识别这类静态资源,是否需要跟着程序走。

  • 第二种就是考虑将其打包进二进制文件中。

第二种情况的话,Go 以前是不支持的,大家就会去借助各种花式的开源库,例如:go-bindata/go-bindata 来实现。

但从在 Go1.16 起,Go 语言自身正式支持了该项特性,今天我们将通过这篇文章快速了解和学习这项特性。

基本使用

演示代码:

import _ "embed"  //go:embed hello.txt var s string  func main() {  print(s) }

我们首先在对应的目录下创建了 hello.txt 文件,并且写入文本内容 "吃煎鱼"。

在代码中编写了最为核心的 //go:embed hello.txt 注解。注解的格式很简单,就是 go:embed 指令声明,外加读取的内容的地址,可支持相对和绝对路径。

输出结果:

吃煎鱼

读取到静态文件中的内容后自动赋值给了变量 s,并且在主函数中成功输出。

而针对其他的基础类型,Go embed 也是支持的:

//go:embed hello.txt var s string  //go:embed hello.txt var b []byte  //go:embed hello.txt var f embed.FS  func main() {  print(s)  print(string(b))   data, _ := f.ReadFile("hello.txt")  print(string(data)) }

输出结果:

吃煎鱼 吃煎鱼 吃煎鱼

我们同时在一个代码文件中进行了多个 embed 的注解声明。

并且针对 string、slice、byte、fs 等多种类型进行了打包,也不需要过多的处理,非常便利。

拓展用法

除去基本用法完,embed 本身在指令上也支持多种变形:

//go:embed hello1.txt hello2.txt var f embed.FS  func main() {  data1, _ := f.ReadFile("hello1.txt")  fmt.Println(string(data1))   data2, _ := f.ReadFile("hello2.txt")  fmt.Println(string(data2)) }

在指定 go:embed 注解时可以一次性多个文件来读取,并且也可以一个变量多行注解:

//go:embed hello1.txt  //go:embed hello2.txt var f embed.FS

也可以通过在注解中指定目录 helloworld,再对应读取文件:

//go:embed helloworld var f embed.FS  func main() {  data1, _ := f.ReadFile("helloworld/hello1.txt")  fmt.Println(string(data1))   data2, _ := f.ReadFile("helloworld/hello2.txt")  fmt.Println(string(data2)) }

同时既然能够支持目录读取,也能支持贪婪模式的匹配:

//go:embed helloworld/* var f embed.FS

可能会有小伙伴注意到,embed.FS 也能调各类文件系统的接口,其实本质是 embed.FS 实现了 io/fs 接口。

只读属性

在 embed 所提供的 FS 中,我们可以发现其都是打开和只读方法:

type FS     func (f FS) Open(name string) (fs.File, error)     func (f FS) ReadDir(name string) ([]fs.DirEntry, error)     func (f FS) ReadFile(name string) ([]byte, error)

根据此也可以确定 embed 所打包进二进制文件的内容只允许读取,不允许变更。

更抽象来讲就是在编译期就确定了 embed 的内容,在运行时不允许修改,保证了一致性。

"如何使用Go1.16的新特性"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

文件 内容 支持 注解 特性 输出 二进制 代码 就是 目录 静态 变量 同时 多个 多种 情况 指令 接口 方法 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 联想服务器键盘鼠标全部失灵 松江区咨询软件开发技术指导 geo数据库表格怎么看 学校如何引导大学生的网络安全 计算机网络技术应用哪个专业好 平顶山管理软件开发公司 数据库安装时 显示已安装 高职学生如何学习网络技术 软件开发过程不诚信 东莞市财商互联网科技服务公司 怎么修改别人的服务器 联想服务器设置u盘启动快捷键 深圳商城软件开发哪家好 安全狗 服务器版 连云港集中式分布式存储数据库 做软件开发有机会爬管理岗吗 数据库管理系统论文有哪些 数据库软件哪个容易下载 河南服装外贸软件开发 华为数据平台软件开发部 网络安全保卫综述 贵州省服务器托管云主机 网络安全教育考试答案2021 服务器安全事件查看 大学生网络安全比赛证书 无锡惠普服务器维修服务点 服务器管理终端登陆不了 网络安全攻防大赛胖 烟台鹏超网络技术 软件开发公司门头图片
0