golang 中使用 statik 将静态资源编译进二进制文件中

这篇具有很好参考价值的文章主要介绍了golang 中使用 statik 将静态资源编译进二进制文件中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现在的很多程序都会提供一个 Dashboard 类似的页面用于查看程序状态并进行一些管理的功能,通常都不会很复杂,但是其中用到的图片和网页的一些静态资源,如果需要用户额外存放在一个目录,也不是很方便,如果能打包进程序发布的二进制文件中,用户下载以后可以直接使用,就方便很多。

最近在阅读 InfluxDB 的源码,发现里面提供了一个 admin 管理的页面,可以通过浏览器来执行一些命令以及查看程序运行的信息。但是我运行的时候只运行了一个 influxd 的二进制文件,并没有看到 css, html 等文件。

原来 InfluxDB 中使用了 statik 这个工具将静态资源都编译进了二进制文件中,这样用户只需要运行这个程序即可,而不需要管静态资源文件存放的位置。

go get -d github.com/rakyll/statik
go install github.com/rakyll/statik

首先要声明,一般在 main.go 文件中,这样直观一些:

package main

//go:generate statik -src=../../web/public -dest=../../internal -f

func main() {

}

这段声明的意思是,使用 statik 命令将目录../../web/public下的文件和目录编译到一个go文件中,此文件为../../internal/statik/statik.go,会自动创建之。

go:generate指令需要手动执行,来到根目录下go generate ./…

statik.go文件内容为

// Code generated by statik. DO NOT EDIT.

package statik

import (
	"github.com/rakyll/statik/fs"
)


func init() {
	data := ".............."
	fs.Register(data)
}

将文件信息注册到 fs 之后,就可以实例化出来一个 http.FileSystem 对象

var statikFS http.FileSystem

statikFS, err = fs.New()

然后就可以指定文件名来读取文件内容了

file, err := statikFS.Open("/index.html")

这里返回的 file 类型是http.File,它服务于文件系统 FileSystem ,因此它是只读的,没有提供写的接口。

// A File is returned by a FileSystem's Open method and can be
// served by the FileServer implementation.
//
// The methods should behave the same as those on an *os.File.
type File interface {
	io.Closer
	io.Reader
	io.Seeker
	Readdir(count int) ([]fs.FileInfo, error)
	Stat() (fs.FileInfo, error)
}

在vue项目中,我们只需要返回 index.html 的内容即可,具体实现如下

m.Get("/", func(ctx *macaron.Context) {
	file, err := statikFS.Open("/index.html")
	if err != nil {
		logger.Error("读取首页文件失败: %s", err)
		ctx.WriteHeader(http.StatusInternalServerError)
		return
	}

	io.Copy(ctx.Resp, file)

})

当然 public 目录中的应该是打包好的 vue 项目。

golang 中使用 statik 将静态资源编译进二进制文件中,golang,golang文章来源地址https://www.toymoban.com/news/detail-806136.html

到了这里,关于golang 中使用 statik 将静态资源编译进二进制文件中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ARM 嵌入式 编译系列 10.4 -- 生成二进制文件】

    在嵌入的工作中,经常会使用到二进制文件,那么我们如何自己生成一个二进制文件呢?接下来介绍如何将一个只包含将32位数据的文件转化为二进制文件,原文件如下(数据一共 64bytes): 我们使用 gcc 对齐先进行编译然后再进行反汇编: 具体命令如下: 通过上面命令会生成

    2024年02月02日
    浏览(54)
  • 【JavaScript】后端返回的二进制流音频数据或本地音频资源,前端如何播放?

    如果我们要使用本地的音频资源,在 vue3 中那么我们需要对资源的地址做一下处理 后端返回二进制流音频数据,怎么让其可播放 前端播放二进制语音流

    2024年02月03日
    浏览(64)
  • MySQL三种安装方法(yum安装、编译安装、二进制安装)

    切记:一定要关闭防火墙和selinux!!! 服务器配置:2C4G即可,一台 mysql的官方网站:www.mysql.com 中文官网:https://www.mysql.com/cn/ 1、下载mysql的yum源 2、安装mysql的yum仓库 3、配置yum源 4、安装数据库 5、查找密码 6、修改密码 两种方式: 第一种:登录数据库后操作 第二种:免入

    2024年02月07日
    浏览(53)
  • 大幅提升iOS编译速度的cocoapods二进制化插件介绍

    驾校一点通iOS项目是采用是cocoapods来管理组件的,又经过多年的组件化发展,目前组件已经达到了120+的数量。在这种组件规模下,主工程的打包时间也从最开始的几分钟增加到十几分钟(M1)、二十几分钟(Intel)。而且在频繁切换分支开发的场景下,每次编译的耗时成了制

    2024年02月08日
    浏览(55)
  • MySQL Shell 8.0.32 for GreatSQL编译二进制包

    构建MySQL Shell 8.0.32 for GreatSQL 之前已经写过一篇前传 MySQL Shell 8.0.32 for GreatSQL编译安装,最近再次编译MySQL Shell二进制包时,发现了一些新问题,因此重新整理更新本文档。 这次编译MySQL Shell发现几个新问题,下面一一列举。 MySQL Shell要求配套的antlr4版本必须是4.10.0,配套的

    2024年02月19日
    浏览(56)
  • 如何使用VSCode来查看二进制文件

    2023年11月6日,周一下午 目录 方法1:安装插件Binary Viewer 然后用vscode打开一个二进制文件,并点击右上角的\\\"HEX\\\" 方法2:安装插件Binary 然后用vscode打开一个二进制文件,并点击右上角的\\\"B\\\" 特点:功能比较完善 然后用vscode打开一个二进制文件,并点击右上角的\\\"HEX\\\" 特点:功能简

    2024年02月03日
    浏览(47)
  • 使用 WebSocket 发送二进制数据:最佳实践

    WebSocket  技术提供了一种在客户端和服务器间建立持久连接的方法,使得双方可以在打开连接后随时发送数据,而不必担心建立复杂的持久连接机制。同时,使用二进制数据,如ArrayBuffer,可以更有效率地传送图像、声音等信息。本指南旨在深入探讨如何使用WebSocket传输二进

    2024年04月09日
    浏览(46)
  • 数据结构:使用顺序栈的基本操作,实现十进制转为二进制,十六进制的转换

    使用系统环境: 1:win10,使用工具dev 2:使用系统win10 3:参考书籍数据结构(C语言版——严蔚敏 吴伟民) ( 注意:此文章默认,学习者拥有一定的数据机构栈,C语言的知识,书籍第20页,2.1算法的代码进行一个简化。)

    2024年02月05日
    浏览(66)
  • CMake教程系列-02-使用cmake代码生成二进制

    参考:Cmake安装以及升级(Ubuntu) Win10安装文件: 创建的目录以及代码如下: CMakeLists.txt sample.cpp 目录结构如下:注意多创建一个build目录存放中间文件和最终二进制文件 点击“Configure 我的的vs是2019,在Configure中选择了 点击“Configure”右边的“Generate”。 点击“Generate”右边

    2024年02月04日
    浏览(56)
  • js使用xlsx生成二进制文件用于上传(不下载)

    业务中经常会处理各种数据,本文介绍了前端通过 xlsx 库将数据转换为 excel 文件用于上传的实现。

    2024年02月13日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包