Go Web 项目打包为一个文件

栏目: Go · 发布时间: 7年前

内容简介:使用过 golang 之后,我最喜欢的就是它的打包和交叉编译尤其是打包,对于一些后台服务,打包成一个文件部署起来很是方便但是在进行 web 开发时,必然会有静态资源文件,部署时就要把静态目录和打包后的二进制文件都上传到服务器。一台服务器还好,要是有多台服务器上传静态文件也是一件很麻烦的时。

使用过 golang 之后,我最喜欢的就是它的打包和交叉编译

尤其是打包,对于一些后台服务,打包成一个文件部署起来很是方便

但是在进行 web 开发时,必然会有静态资源文件,部署时就要把静态目录和打包后的二进制文件都上传到服务器。一台服务器还好,要是有多台服务器上传静态文件也是一件很麻烦的时。

去网上搜了下竟然还真有 工具 和把静态文件打包到二进制文件的,原理就是把静态资源生成一个很大的 go 文件(把文件进行字符编码),然后再引入到项目中,最后实现文件接口在读取文件时候从代码中读取文件

安装依赖

下载依赖

go get -u github.com/jteeuwen/go-bindata
go get -u github.com/elazarl/go-bindata-assetfs

安装 go-bindata 到 GOPATH/bin

go install github.com/jteeuwen/go-bindata/go-bindata

使用

切换到项目路径下,这里一个 web 服务器为例,所有静态资源放在 www 目录下

执行 go-bindata -o=data/data.go -pkg=data www/...

这句话的意思是把 www 目录下所有文件生成为一个 go 文件,放置到 data/data.go ,文件的包名为 data

package main

import (
	"github.com/elazarl/go-bindata-assetfs"
	"github.com/tmaize/bindata/data"
	"net/http"
)

func main() {

	// 重新实现文件接口
	files := assetfs.AssetFS{
		Asset:     data.Asset,
		AssetDir:  data.AssetDir,
		AssetInfo: data.AssetInfo,
		Prefix:    "www", // 访问文件1.html = > 访问文件 www/1.html
	}

	// http.Handle("/", http.FileServer(http.Dir("./www")))
	http.Handle("/", http.FileServer(&files))
	http.ListenAndServe(":8899", nil)
}

可以看到引入了生成的 data.go ,最终在 http.FileServer 中传入自己实现的文件系统,使得在访问文件时找到对应的字符编码,再转换为文件流

总结

静态文件一共 30M,最终打包生成了 19M 的文件,这也算是一个优点了

使用起来还是挺方便的,每次静态文件改动的话在打包前记得重新执行 go-bindata 命令

以后在做工具时候可以提供一个 web 界面,不用再搞那么麻烦的 gui 了


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Seasoned Schemer

The Seasoned Schemer

Daniel P. Friedman、Matthias Felleisen / The MIT Press / 1995-12-21 / USD 38.00

drawings by Duane Bibbyforeword and afterword by Guy L. Steele Jr.The notion that "thinking about computing is one of the most exciting things the human mind can do" sets both The Little Schemer (form......一起来看看 《The Seasoned Schemer》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具