Go 1.16 embed特性的简单应用
项目结构如下: └─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