Golang嵌入资源文件实现步骤详解
作者:梦想画家 发布时间:2023-06-21 08:52:36
Go文档中展示了多种方式实现外部资源嵌入,包括文本文件、图片、ios文件等:
文本文件
package main
import _ "embed"
//go:embed schema.sql
var tableCreate string
func main() {
print(tableCreate)
}
在构建时,schema.sql内容会嵌入至应用中,使得tableCreate字符串变量可用。与通过环境变量嵌入信息至应用类似。
输出结果:
create table sys_user(
id int,
name varchar(36),
birth date
)
图片文件
如果是图片,可以编码为二进制字节切片:
package main
import (
_ "embed"
"encoding/base64"
)
//go:embed logo.png
var logo []byte
func main() {
print(base64.RawStdEncoding.EncodeToString(logo))
}
镜像文件
一旦在内存中,logo文件就可以通过HTTP连接提供给客户端使用。使用embed.FS接口与上面示例不同,数据仅当需要时才会加载至内存,这种方法对于大文件非常有用:
package main
import (
"embed"
"fmt"
)
//go:embed ubuntu-20-cloud.iso
var f embed.FS
func main() {
data, _ := f.ReadFile("ubuntu-20-cloud.iso")
fmt.Printf("Total bytes: %d\n", len(data))
}
Go是一种非常好的系统编程语言,它提供了许多用于管理文件系统和网络的包,应用可能会在程序中发送类似ISO映像文件,可以随时将其写入磁盘中。
前端应用文件
有时希望把前端应用的文件嵌入至应用中,和http服务一起实现完整web应用。
// frontend holds our static web server content.
//go:embed image/* template/*
//go:embed public/index.html
//go:embed css/*var frontend embed.FS
现在可以简单连接embed.FS至自定义HTTP中间件或处理器,从特点路由或路径给用户提供文件。下面时Go文档中提供的示例:
http.Handle( "/public/",
http.StripPrefix( "/public/",
http.FileServer( http.FS(frontend))))
你的API可以被绑定到路径/API/v1/,然后你嵌入的任何静态内容都会通过/public/路由提供访问。
编译打包
go build .
通过编译打包,会生成独立可执行文件。拷贝至任何目录也可以直接运行,不会因为找不到资源文件而报错。
来源:https://blog.csdn.net/neweastsun/article/details/128437948
猜你喜欢
- 而Easp类中提供了大量实用的ASP通用过程及方法,可以简化大部分的ASP操作。目前只提供了VBScript版,JScript版将来可能会提
- 最近,W3C的一项公告称,在W3C与XHTML2的合同于今年年底到期后将不会续签。这意味着W3C停止了对XHTML2的开发,转而大力支持HT
- 思考一个问题:怎么实现在第一次检索的基础上进行二次检索?通常,我们的做法是第一次检索时保存检索条件,在第二次行检索时组合两次检索条件对数据库
- 在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854;
- 使用jmail组件发送邮件:Function JMail(Send_From,Send_To,Send_Subject,Send_
- 1. 查看数据库的版本select @@version2.查看数据库所在机器操作系统参数exec master..xp_msver3. 查看
- 本文实例讲述了正则表达式验证IPV4地址功能。分享给大家供大家参考,具体如下:IPV4地址由4个组数字组成,每组数字之间以.分隔,每组数字的
- 摘要:对动态SQL的程序开发进行了总结,并结合笔者实际开发经验给出若干开发技巧。 关键词:动态SQL,PL/SQL,高性能 1. 静态SQL
- 一、设计说明设计这个自动化的目的是想要交替、重复地使用固定的几个分区(分区编号01~05)来保存数据,当最后一个分区就是快满的时候,我们会把
- PDOStatement::fetchAllPDOStatement::fetchAll — 返回一个包含结果集中所有行的数组(PHP 5
- PDOStatement::bindValuePDOStatement::bindValue — 把一个值绑定到一个参数(PHP 5 >
- 当讨论Request对象内容时,要研究的集合之一就是ServerVariables集合。这个集合包含了两种值的结合体,一种是随同
- 一个网站的一个页面download.asp通过判断referer来确定是不是从他本站点过来的链接,使用这个功能我们可以用来防止下载盗链,当然
- 文本框 textarea 限制输入文字个数的的javascript代码,我们经常在评论留言页面我们需要在客户端限制访客的留言长度,当然最好我
- ASP使用xmlhttp获取远程网页内容,解决乱码问题方法一:<%function getHTTPPage(url)on error
- iframe 标签 -- 代表HTML内联框架iframe 标签是成对出现的,以<iframe>开始,</ifr
- css实现的圆角矩形的方式很多,但要追求灵活型,上面的结构简单,看起来爽一点注意css所用的图片路径,已修改兼容ie6 ie7 ff ,IE
- 代码如下:'返回指定文件夹中文件的数目,传入值为被检测文件夹的硬盘绝对路径 function CountFile
- Oracle关系型数据库管理系统是世界上流行的关系数据库,它是一个极其强大、灵活和复杂的系统,据说,在使用oracle时应有这样的思想,那就
- 一直在期待这本书,一直希望国内能有一本正视WEB标准,并且全面阐述WEB标准书籍。而这本书是我觉得国内最全面的一本关于WEB标准的书籍,这本