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


猜你喜欢
- 这篇文章主要介绍了Python3如何对urllib和urllib2进行重构,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 写在前面Omi框架可以通过在组件上声明 data-* 把属性传递给子节点。Omi从设计之初,就是往标准的DOM标签的标准传递方式靠齐。比如:
- 前言数十年以来, 传统的面向对象语言总是说方法属于类, 但 Go 不是这样做的: 它提供了方法, 但是并没有提供类和对象。 乍一看, 这种做
- 我设了两个SESSION:SESSION(A1),SESSION(A2),然后我现在想结束其中一个SESSION(如:ESEEION(A1)
- 一、简单的多表联查(inner join,left join,right join)1、 两表联查user_table表department
- mysql复制表的几种方式 所描述的方法还请实际测试一下再使用.1、复制表结构及数据到新表CREATE TABLE 新表SELEC
- 执行以下SQL,即OK咯叻!! SQL:alter database 数据库名称 SQL_Latin1_General_CP1_CI_AS
- 前言所谓模糊查询就是不需要用户完整的输入或者说全部输入信息即可提供查询服务,也就是用户可以在边输入的同时边看到提示的信息(其实是查询出来匹配
- 在上一个文章里写了关于左(右)侧定宽右(左)侧自动缩放的两列浮动,这个文章就要说一下三列浮动的问题了。在之前说过,两列浮动是其他多列浮动的基
- 构建网络ResNet由一系列堆叠的残差块组成,其主要作用是通过无限制地增加网络深度,从而使其更加强大。在建立ResNet模型之前,让我们先定
- 一个SELECT查询中的LIKE语句来执行这种查询,尽管这种方法可行,但对于全文查找而言,这是一种效率极端低下的方法,尤其在处理大量数据的时
- 什么是瀑布图?瀑布图用表达两个数值之间的变化过程,过程值为正的时候,向上加,过程值为负的时候向下减[1]。今天分享在Python中绘制瀑布图
- 学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层。虽
- 使用Python获取网段的IP个数以及地址清单需要用到IPy的库,而相应的方法主要就是IP。写小脚本如下: from IPy import
- 前言时隔108天,何同学在B站发布了最新的视频,《【何同学】我用108天开了个灯…》。那么就让我们用爬虫,爬取视频的弹
- 今天写了一个简单的验证,本来前面用的组件,但是感觉写的组件在此项目不是很好用,由于用到的地方比较少,所以直接写在了页面中。<div&g
- 我们知道了钢琴键盘的音高是其实是有规律的,如下频率翻倍,高一个八度国际基准音:440Hz,钢琴键盘上对应小字一组的la小字一组的la可以看下
- 本文研究的主要是Django rest framework的相关内容,分享了example,具体如下。Django REST框架是构建Web
- 前言SPA项目中,首屏加载速度都是老生常谈的问题了,首屏时间直接反应了用户多久能看到页面的主要内容,这决定了用户体验,本文聊一聊如何采集首屏
- 场景go 如果频繁地创建、销毁对象(比如 http 服务的 json 对象,日志内容等),会对 GC 造成压力。比如下面的 Log 函数,在