突然想到golang 打包只有一个文件.sh或.exe 无法把文件夹打包进入
所以有些静态资源如html或者css/jpg等文件无法处理
专门找到的解决这两类文件的方案
1.解决html加载的开源工具:
github.com/jessevdk/go-assets
安装go-assets-builder(执行以下一种就行...)
go get github.com/jessevdk/go-assets-builder
go install github.com/jessevdk/go-assets-builder@latest
安装成功后:
在本目录执行:go-assets-builder templates -o assets.go
2.解决js/css/image等静态资源的开源工具:
案例如下:github.com/shurcooL/vfsgen
1.html加载自动生成的go文件
代码部分(gin):
// 执行命令: go-assets-builder templates -o assets.go -p main
func loadTemplate() (*template.Template, error) {
t := template.New("")
for name, file := range Assets.Files {
// 可以用.tmpl .html
if file.IsDir() || !strings.HasSuffix(name, ".html") {
continue
}
h, err := ioutil.ReadAll(file)
if err != nil {
return nil, err
}
t, err = t.New(name).Parse(string(h))
if err != nil {
return nil, err
}
}
return t, nil
}
// asset 加载 htmls
templates, err := loadTemplate()
if err != nil {
panic(err)
}
// 配置模板
// router.LoadHTMLGlob("resources/templates/*")
router.SetHTMLTemplate(templates)
2.静态资源加载自动生成的go文件
代码部分(gin):
// 配置静态文件夹路径 第一个参数是api,第二个是文件夹路径
router.StaticFS("/static", Dir)
3.main方法(gin)整体:
package main
import (
"fmt"
"html/template"
"io/ioutil"
"net/http"
"strings"
"time"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
// asset 加载 htmls
templates, err := loadTemplate()
if err != nil {
panic(err)
}
// 配置模板
// router.LoadHTMLGlob("resources/templates/*")
router.SetHTMLTemplate(templates)
// 配置静态文件夹路径 第一个参数是api,第二个是文件夹路径
router.StaticFS("/static", Dir)
// 请求
group := router.Group("/")
{
group.GET("/", Index)
group.GET("/index", Index)
group.GET("/hello", Hello)
group.GET("/sayHello/:name", SayHello)
}
router.Run(":9090")
}
//http://localhost:9090/sayHello/dong
func SayHello(c *gin.Context) {
name := c.Param("name")
c.JSON(http.StatusOK, "hello,"+name)
}
//http://localhost:9090/hello
func Hello(c *gin.Context) {
c.HTML(http.StatusOK, "/templates/hello.html", gin.H{
"Hello": fmt.Sprintf("%v %v", "HelloWorld!", time.Now().Local()),
})
}
//http://localhost:9090/index
func Index(c *gin.Context) {
c.HTML(http.StatusOK, "/templates/index.html", gin.H{
`WEBSITE_TITLE`: `東の博客`,
})
}
// 执行命令: go-assets-builder templates -o assets.go -p main
func loadTemplate() (*template.Template, error) {
t := template.New("")
for name, file := range Assets.Files {
// 可以用.tmpl .html
if file.IsDir() || !strings.HasSuffix(name, ".html") {
continue
}
h, err := ioutil.ReadAll(file)
if err != nil {
return nil, err
}
t, err = t.New(name).Parse(string(h))
if err != nil {
return nil, err
}
}
return t, nil
}