突然想到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
}

4.访问效果如图:

项目整体: