项目结构如下:
1└─ui 2 └─embed_ui.go 3 └─dist 4 └─index.html 5 └─static 6 ├─css 7 └─ ... 8 ├─fonts 9 └─ ... 10 └─js 11 └─ ... 12└─main.go 13└─go.mod 14 15 16//embed_ui.go 17package ui 18 19import ( 20 `embed` 21) 22 23//go:embed dist 24var WebUI embed.FS 25 26 27//main.go 28// 嵌入普通静态资源 29type StaticResource struct { 30 // 静态资源 31 staticFS embed.FS 32 // 设置embed文件到静态资源的相对路径,也就是embed注释里的路径 33 path string 34} 35// 静态资源被访问逻辑 36func (_this_ *StaticResource) Open(name string) (fs.File, error) { 37 var fullName string 38 if strings.Contains(name,`/`){ 39 fullName = path.Join(_this_.path,"static",name) 40 }else{ 41 fullName = path.Join(_this_.path,name) 42 } 43 file, err := _this_.staticFS.Open(fullName) 44 return file, err 45} 46 47func main() { 48 // 设置静态资源 49 static := &StaticResource{ 50 staticFS: ui.WebUI, 51 path: "dist", 52 } 53 54 engine := gin.Default() 55 { 56 // 设置 57 engine.StaticFS("/static/",http.FS(static)) 58 // 首页 59 engine.GET("/", func(context *gin.Context) { 60 context.Writer.WriteHeader(http.StatusOK) 61 indexHTML,_ := static.staticFS.ReadFile(static.path + "/" + "index.html") 62 context.Writer.Write(indexHTML) 63 context.Writer.Header().Add("Accept","text/html") 64 context.Writer.Flush() 65 }) 66 } 67 engine.Run() 68} 69 70 71[GIN-debug] GET /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers) 72[GIN-debug] HEAD /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers) 73[GIN-debug] GET / --> main.main.func1 (3 handlers) 74[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default 75[GIN-debug] Listening and serving HTTP on :8080 76[GIN] 2021/02/17 - 17:37:07 | 200 | 530.8µs | ::1 | GET "/" 77[GIN] 2021/02/17 - 17:37:07 | 200 | 135.1147ms | ::1 | GET "/static/js/chunk-2d0b6337.40e74af5.js" 78[GIN] 2021/02/17 - 17:37:07 | 200 | 134.5926ms | ::1 | GET "/static/css/chunk-3d4a32e8.4951a1b7.css" 79[GIN] 2021/02/17 - 17:37:07 | 200 | 146.7519ms | ::1 | GET "/static/css/index.d72cf005.css" 80[GIN] 2021/02/17 - 17:37:07 | 200 | 147.2865ms | ::1 | GET "/static/js/index.15d7bf17.js" 81[GIN] 2021/02/17 - 17:37:07 | 200 | 151.6588ms | ::1 | GET "/static/css/chunk-vendors.16da611a.css" 82[GIN] 2021/02/17 - 17:37:07 | 200 | 148.8884ms | ::1 | GET "/static/js/chunk-vendors.24c0b194.js" 83[GIN] 2021/02/17 - 17:37:07 | 200 | 0s | ::1 | GET "/static/js/chunk-2d0d69a3.6eb93f6e.js" 84[GIN] 2021/02/17 - 17:37:07 | 200 | 364.8µs | ::1 | GET "/static/js/chunk-2d0e53c4.94fb2765.js" 85[GIN] 2021/02/17 - 17:37:07 | 200 | 382.2µs | ::1 | GET "/static/js/chunk-3d4a32e8.ced07e34.js" 86[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