当开发 fdem-os 时候 以为想把应用做成直接的单一启用文件,所以说一直再思考怎么把 静态文件 html以及一些css,js一类的文件给打包到应用内而不用通过程序下载在去加载,这样及方便使用又保证了代码的安全性,最终发现 golang 可以完美实现需求的 packr 第三方包。

1632464133

 通过 packr 我们可以完美的将静态资源打包进应用程序,并开启一个 http服务 以供使用。

golang packr 包文档

 packr项目文档地址

 目前最新版本为 v2.8.1 版本,推荐使用 v2 版本进行开发。

packr 包 官方介绍

Packr is a simple solution for bundling static assets inside of Go binaries. Most importantly it does it in a way that is friendly to developers while they are developing

 Packr是将静态资产捆绑到 Go 二进制文件中的简单解决方案。最重要的是,它以对开发人员在开发期间友好的方式进行。

 可以看到他的存在即是为了更好的实现将资源文件打包成二进制到应用内。

packr安装引用

go get -u github.com/gobuffalo/packr/v2/packr2

 如果下载失败或者下载缓慢请参考 go使用go mod加速依赖管理

packr 包的使用

 我们只需要在调用的时候使用 import 进来即可

import (
   "github.com/gobuffalo/packr/v2"
)

 然后通过指定特定的静态资源目录来将需要打包的文件制定进来

   var (
       Static *packr.Box
       Views  *packr.Box
   )

   Views = packr.New("views", "../../app/views")
   Static = packr.New("static", "../../static")

   html, err := Views.FindString(name)
   if err != nil {
       log.Fatal(err)
   }
   
   fmt.Println(html)

通过 packr 包打包指定静态资源

 我们在编写完代码之后需要通过 packr2 命令打包一下才可以生效。

  • 点击下载packr2打包程序
  • 下载完成后我们执行 packr2 命令打包

     packr2 build
  • 然后再打包go

     go build
  • 最后我们需要将 packr2 生成的二进制清理下

     packr2 clean

自用完整 packr 打包脚本

win 版

  • build.bat
echo off
echo build start
packr2 build
echo --- packr2 build success

SET CGO_ENABLED=0
SET GOOS=windows
SET GOARCH=amd64
go build
echo --- go build windows success

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build
echo --- go build linux success

packr2 clean
echo --- packr2 clean success
echo build success

linux 版

  • build.sh
#!/bin/sh

echo "build start"
packr2 build
echo "--- packr2 build success"
go build
echo "--- go build success"
packr2 clean
echo "--- packr2 clean success"
echo "build success"

packr 包注意事项

  • 一定要将 packr 代码放在首次可执行区域

 关于 go使用packr包把静态资源文件打包进二进制应用内 已经完美解决了 packr 使用起来还是比较方便好用的推荐可以试试。