• [Go] embed指令嵌入静态文件到二进制包


    go 1.16开始提供了embed指令 , 可以将静态资源嵌入到编译包里面

    这样就可以把网页模板等文件直接打包了,就不需要每次还要拷贝静态文件

    常规用法:

    import _ "embed"
    
    //go:embed hello.txt
    var s string
    
    func main() {
     print(s)
    }

    作为一个文件路径,也支持多个,以及通配符

    //go:embed hello1.txt hello2.txt
    var f embed.FS
    
    func main() {
     data1, _ := f.ReadFile("hello1.txt")
     fmt.Println(string(data1))
    
     data2, _ := f.ReadFile("hello2.txt")
     fmt.Println(string(data2))
    }

    但是

    路径里面不能包含 .   ..   这种相对路径的符号否则报错 , 也不能以/ 开头

    这就意味着 , 如果模板文件在单独的目录里 , 那么需要有个go的包以及go文件对外提供全局变量

    类似我这样

    package static
    
    import "embed"
    
    //go:embed templates/*
    var TemplatesEmbed embed.FS
    
    //go:embed js/*
    var JsEmbed embed.FS

    如果与gin的模板渲染配合使用

            templ := template.Must(template.New("").ParseFS(static.TemplatesEmbed, "templates/*.html"))
            engine.SetHTMLTemplate(templ)

    渲染模板的时候就可以直接来 , 模板的路径是在 ./static/templates/index.html

        c.HTML(http.StatusOK, "index.html", gin.H{
            "Title":    title,
        })

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com

    赞赏作者

    微信交流

  • 相关阅读:
    文件编码转换
    mysql密码的奇怪问题
    python文件读写
    python中JSON的使用
    mysql默认字符编码的修改
    烧写uboot与linux操作系统,安装Samba,jlink驱动安装
    Busybox是什么?
    ubuntu 搭建GTK+以及glade2集成开发环境的一些方法
    Ubuntu linux安装ssh server
    UBoot启动过程(国嵌)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14738566.html
Copyright © 2020-2023  润新知