当前位置: 首页 > news >正文

Golang:使用embed引入静态文件

Go 语言从 1.16 版本开始引入了一个新的标准库 embed,可以在二进制文件中引入静态文件

指令:/go:embed

通过一个简单的小实例,来演示将静态文件引入到golang的二进制打包产物中

项目结构

$ tree
.
├── main.go
└── static└── hello.txt

hello.txt 文件内容

Hello World!

main.go

1、引入静态文件的内容到变量

package mainimport ("embed""fmt"
)// 引入静态文件的内容到变量content
//go:embed static/hello.txt
var content string// 注意需要这个语句,虽然没有用到,可以引入整个目录的文件
//go:embed static/*
var tmplFS embed.FSfunc main() {fmt.Println(content)
}

输出

Hello World!

2、引入整个目录内所有文件

package mainimport ("embed""fmt"
)//go:embed static/*
var tmplFS embed.FSfunc main() {// 读取文件内容content, _ := tmplFS.ReadFile("static/hello.txt")fmt.Println(string(content))// Hello World!
}

将打包产物拷贝到其他任意目录运行,也可以读取到静态文件内容

# 编译
$ go build main.go# 拷贝到其他任意目录运行
./main
Hello World!

需要注意:

  1. 要引入包embed
  2. //go:embed 是一个整体,双斜杆后面不能有空格,例如:// go:embed是无效的

扩展:前后端分离的项目中,可以通过该方式,将前端的打包产物内嵌到golang的二进制打包产物中,一起发布

参考

  • Go实验室:每周一更|利用embed引入静态文件

相关文章:

  • 【Uniapp微信小程序】自定义水印相机、微信小程序地点打卡相机
  • Vue CLI:Vue CLI是一个强大的工具,可以帮助开发者快速地创建和管理Vue项目。我们可以讨论它的一些核心特性,比如热重载、懒加载等
  • 【云原生】kubernetes中pod的生命周期、探测钩子的实战应用案例解析
  • C++入门5——C/C++动态内存管理(new与delete)
  • 使用 C++ 在当前进程中获取指定模块的基址
  • HackTheBox-Machines--Sense
  • 标题:Go语言中的YAML魔法:轻松配置你的环境
  • Python打印当前目录下,所有文件名的首字母
  • Centos7安装Docker和DockerCompose
  • DynamiCrafter ComfyUI 教程 | 对图片转视频的效果进行精细化控制
  • Spark_SparkOnHive_海豚调度跑任务写入Hive表失败解决
  • Mac/Linux getline 无法读取文件内容(读取内容无法显示)
  • 【数据库】MySQL表的操作
  • jenkins的简单使用
  • 函数尾调用优化
  • 《深入 React 技术栈》
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 345-反转字符串中的元音字母
  • Debian下无root权限使用Python访问Oracle
  • ES2017异步函数现已正式可用
  • github指令
  • iOS编译提示和导航提示
  • MySQL数据库运维之数据恢复
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Vue小说阅读器(仿追书神器)
  • Yii源码解读-服务定位器(Service Locator)
  • 开发基于以太坊智能合约的DApp
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 如何用纯 CSS 创作一个货车 loader
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # 达梦数据库知识点
  • #git 撤消对文件的更改
  • #WEB前端(HTML属性)
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (35)远程识别(又称无人机识别)(二)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (八)c52学习之旅-中断实验
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (一)WLAN定义和基本架构转
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转) ns2/nam与nam实现相关的文件
  • (转)可以带来幸福的一本书
  • (转载)深入super,看Python如何解决钻石继承难题
  • *** 2003
  • .net CHARTING图表控件下载地址
  • .Net Core 笔试1
  • .net core控制台应用程序初识
  • .net framework profiles /.net framework 配置
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET企业级应用架构设计系列之结尾篇
  • @Bean, @Component, @Configuration简析
  • @hook扩展分析