< 返回技术文档列表

Go 1.16 embed特性的简单使用

发布时间:2021-09-01 03:03:45⊙投诉举报

本篇内容介绍了“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"

Go 1.16 embed特性的简单使用

“Go 1.16 embed特性的简单使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注血鸟云网站,小编将为大家输出更多高质量的实用文章!


/template/Home/Zkeys/PC/Static