项目结构如下:
└─ui
└─embed_ui.go
└─dist
└─index.html
└─static
├─css
└─ ...
├─fonts
└─ ...
└─js
└─ ...
└─main.go
└─go.mod
//embed_ui.go
package ui
import (
`embed`
)
//go:embed dist
var WebUI embed.FS
//main.go
// 嵌入普通静态资源
type StaticResource struct {
// 静态资源
staticFS embed.FS
// 设置embed文件到静态资源的相对路径,也就是embed注释里的路径
path string
}
// 静态资源被访问逻辑
func (_this_ *StaticResource) Open(name string) (fs.File, error) {
var fullName string
if strings.Contains(name,`/`){
fullName = path.Join(_this_.path,"static",name)
}else{
fullName = path.Join(_this_.path,name)
}
file, err := _this_.staticFS.Open(fullName)
return file, err
}
func main() {
// 设置静态资源
static := &StaticResource{
staticFS: ui.WebUI,
path: "dist",
}
engine := gin.Default()
{
// 设置
engine.StaticFS("/static/",http.FS(static))
// 首页
engine.GET("/", func(context *gin.Context) {
context.Writer.WriteHeader(http.StatusOK)
indexHTML,_ := static.staticFS.ReadFile(static.path + "/" + "index.html")
context.Writer.Write(indexHTML)
context.Writer.Header().Add("Accept","text/html")
context.Writer.Flush()
})
}
engine.Run()
}
[GIN-debug] GET /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers)
[GIN-debug] HEAD /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers)
[GIN-debug] GET / --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2021/02/17 - 17:37:07 | 200 | 530.8µs | ::1 | GET "/"
[GIN] 2021/02/17 - 17:37:07 | 200 | 135.1147ms | ::1 | GET "/static/js/chunk-2d0b6337.40e74af5.js"
[GIN] 2021/02/17 - 17:37:07 | 200 | 134.5926ms | ::1 | GET "/static/css/chunk-3d4a32e8.4951a1b7.css"
[GIN] 2021/02/17 - 17:37:07 | 200 | 146.7519ms | ::1 | GET "/static/css/index.d72cf005.css"
[GIN] 2021/02/17 - 17:37:07 | 200 | 147.2865ms | ::1 | GET "/static/js/index.15d7bf17.js"
[GIN] 2021/02/17 - 17:37:07 | 200 | 151.6588ms | ::1 | GET "/static/css/chunk-vendors.16da611a.css"
[GIN] 2021/02/17 - 17:37:07 | 200 | 148.8884ms | ::1 | GET "/static/js/chunk-vendors.24c0b194.js"
[GIN] 2021/02/17 - 17:37:07 | 200 | 0s | ::1 | GET "/static/js/chunk-2d0d69a3.6eb93f6e.js"
[GIN] 2021/02/17 - 17:37:07 | 200 | 364.8µs | ::1 | GET "/static/js/chunk-2d0e53c4.94fb2765.js"
[GIN] 2021/02/17 - 17:37:07 | 200 | 382.2µs | ::1 | GET "/static/js/chunk-3d4a32e8.ced07e34.js"
[GIN] 2021/02/17 - 17:37:07 | 200 | 0s | ::1 | GET "/static/fonts/element-icons.535877f5.woff"
不太习惯写长篇大论的文章,看得不是太明白的可以参考下面的链接,研究这个也是了解下用法,如果有更好的写法欢迎留言,共同讨论
参考: https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/113777516