go-bindata-实现静态资源嵌入

前言

Go-Template模板讲解了模板,但是模板本身是静态文件。而在go中,默认情况下,将项目打包成可执行文件时,是不会把依赖的静态资源文件也打包的,所以在部署的时除了要把可执行文件复制到指定目录,还需要把需要的静态文件放到指定位置,这就显得比较繁琐。

而静态文件具有不变性,所以如果能在打包时,把静态资源一并打包,就可以减少部署成本。而go-bindata就可以把静态文件转换为go源文件,就可以实现这个事情。

使用 go-bindata

首先使用下面命令安装

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

安装完毕后,使用下面命令,把我们的a.tpl文件转换为tpl.go文件:

go-bindata -pkg main -o tpl.go a.tpl

使用上面命令我们可以吧a.tpl文件转换为tpl.go文件。其中-o是指定生成的文件的名称为tpl.go,-pkg是指定生成的tpl.go文件的包名为main,a.tpl是目标tpl。

比如a.tpl内容为:

/**创建变量company,保存Company变量**/
{
   { $company := .Company}}
/**遍历Company内的所有Person**/
{
   { range .Company.Persons -}}
/** 如果名称为"jiaduo" 则先打印person的name,然后打印公司名**/
{
   {- if eq .Name "JiaDuo" }}
{
   { lowerFirst .Name}} {
   {$.Company.CompanyName}}
{
   {- else }}
/** 否则先打印公司名称,然后打印Person的name**/
{
   {$company.CompanyName}} {
   { lowerFirst .Name}}
{
   {- end }}
{
   { end -}}

则生成的tpl.go内容为:

// Code generated by go-bindata. (@generated) DO NOT EDIT.


// Package tpl generated by go-bindata.
// sources:
// a.tpl
package main


import (
  "bytes"
  "compress/gzip"
  "fmt"
  "io"
  "io/ioutil"
  "os"
  "path/filepath"
  "strings"
  "time"
)


func bindataRead(data []byte, name string) ([]byte, error) {
  gz, err := gzip.NewReader(bytes.NewBuffer(data))
  if err != nil {
    return nil, fmt.Errorf("read %q: %v", name, err)
  }


  var buf bytes.Buffer
  _, err = io.Copy(&buf, gz)
  clErr := gz.Close()


  if err != nil {
    return nil, fmt.E
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值