Go:以二进制格式嵌入静态文件 [英] Go: embed static files in binary

查看:163
本文介绍了Go:以二进制格式嵌入静态文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这可能是一个非常业余的问题。我试图将静态文件嵌入到二进制文件中,即。 HTML。我如何使用 https://github.com/jteeuwen/go-bindata 执行此操作?



因此,我可以通过 https://github.com/jteeuwen/go-bindata#accessing-an-asset ,但我该如何处理数据,以及如何解析文件,执行模板并提供服务他们在目录中?



我找不到任何网上的例子,并会感谢一些帮助!



  example / 
main.go
data / hi.html

example / main.go

  package main 

import(
html / template
log
net / http
os


var tmpl * template.Template

func init(){
data,err :=资产(data / hi.html)
如果err!= nil {
log.Fatal(err)
}
tmpl = template.Must(template.New(tmpl).Parse(string(data)))


func main(){
//打印到标准输出
tmpl.Execute(os.Stdout,map [string] string {Name:James })

http.HandleFunc(/,func(w http.ResponseWriter,req * http.Request){
tmpl.Execute(w,map [string] string {Name :James})
})

log.Fatal(http.ListenAndServe(:8000,nil))
}


$ p
$ b $ p $ <$ c $

c>< h1> Hi,{{.Name}}< / h1>

运行方式如下:

  go-bindata data&&去建立&& ./example 

控制台输出:

 < h1> Hi,James< / h1> 

HTTP输出:

Hi,James


This might be a very amateur question. I'm trying to embed static files into binary, ie. html. How do I do that with https://github.com/jteeuwen/go-bindata?

So I can access an asset with this https://github.com/jteeuwen/go-bindata#accessing-an-asset, but what do I do with "data", and how to do I parse files, execute template, and serve them in the directory?

I couldn't find any examples online, and will appreciate some help!

解决方案

Given a directory structure like so:

example/
    main.go
    data/hi.html

example/main.go

package main

import (
    "html/template"
    "log"
    "net/http"
    "os"
)

var tmpl *template.Template

func init() {
    data, err := Asset("data/hi.html")
    if err != nil {
        log.Fatal(err)
    }
    tmpl = template.Must(template.New("tmpl").Parse(string(data)))
}

func main() {
    // print to stdout
    tmpl.Execute(os.Stdout, map[string]string{"Name": "James"})

    http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
        tmpl.Execute(w, map[string]string{"Name": "James"})
    })

    log.Fatal(http.ListenAndServe(":8000", nil))
}

example/data/hi.html

<h1>Hi, {{.Name}}</h1>

run like so:

go-bindata data && go build && ./example

Console Output:

<h1>Hi, James</h1>

HTTP output:

Hi, James

这篇关于Go:以二进制格式嵌入静态文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆