youbbs avatar

把静态文件嵌入到go程序包

🕑 by youbbs

statik 允许您将静态文件目录嵌入 Go 二进制文件中,以便以后从 http.FileSystem 提供服务。

这是一个疯狂的主意吗? 不,不一定。 如果要构建具有Web组件的工具,则通常需要提供一些图像,CSS和JavaScript。 您喜欢分发单个二进制文件的便利,因此您不希望将它们部署到其他地方。 如果您的静态文件不是很大,并且会被一些人浏览,则 statik 是您正在寻找的解决方案。

上面是机翻。简单说是把静态文件打包,方便程序内部调用,又不暴露在外面。是在 Google 上班的小姐姐开发的。

使用方法:

Go:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//go:generate statik -src=./public -include=*.jpg,*.txt,*.html,*.css,*.js

package main

import (
	"log"
	"net/http"

	_ "github.com/rakyll/statik/example/statik"
	"github.com/rakyll/statik/fs"
)

// Before buildling, run go generate.
// Then, run the main program and visit http://localhost:8080/public/hello.txt
func main() {
	statikFS, err := fs.New()
	if err != nil {
		log.Fatal(err)
	}

	http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(statikFS)))
	http.ListenAndServe(":8080", nil)
}

项目地址 https://github.com/rakyll/statik

💘 相关文章

评论

共3条关于"把静态文件嵌入到go程序包"的评论

冒烟的蘑菇 avatar
#1 冒烟的蘑菇 回复

我用 go generate ,与 github.com/mjibson/esc 结合,直接把 所有的静态资源全都集成进去了~

好处是:部署只需要一个 exe,双击执行,linux 下也只需要 ./xxx 即可

坏处是:改一个字节的前端,需要重新来过~

冒烟的蘑菇 avatar
#3 冒烟的蘑菇 回复

@youbbs #2 其实我刚开始接触 youbbs 代码,我就想这么改... ... 以为你不喜欢才没碰这里~

写一条评论

Based on Golang + fastHTTP + sdb | go1.17.1 Processed in 1ms