Go 1.16 embed特性的简单应用

Stella981
• 阅读 723

项目结构如下:

└─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特性的简单应用

不太习惯写长篇大论的文章,看得不是太明白的可以参考下面的链接,研究这个也是了解下用法,如果有更好的写法欢迎留言,共同讨论

参考: https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/113777516

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Stella981 Stella981
2年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
Stella981 Stella981
2年前
Go 1.16新功能特性不完全前瞻
Go1.16将于2021年2月发布。目前已经进入freeze状态,即不再接受新feature,仅fixbug、编写文档和接受安全更新等。目前Go1.16的发布说明尚处于早期草稿阶段,但Go团队成员正在致力于编写发布说明。Go1.16的完全特性列表说明还得等真正发布前才能得到。如今要了解Go1.16功能特性都有哪些变化,只能结合现有的releas
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
贾蓁 贾蓁
2个月前
2023最新版-Web前端架构师(35周完结无密)
2023最新版Web前端架构师(35周完结无密)download》http://quangneng.com/3677/Web前端架构师是负责设计和构建高效、可扩展和可维护的前端Web应用程序的专家。他们通常具有深厚的技术背景,熟悉各种前端技术和工具,并能够
程昱 程昱
1个月前
2023最新版-Web前端架构师35周完结无密
2023最新版Web前端架构师35周完结无密download》quangneng.com/3677/Web前端工程师需要学什么Web前端工程师需要学习的技能和知识主要包括以下几个方面:HTML/CSS/JavaScript:HTML、CSS和JavaScr