经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
[Go] embed指令嵌入静态文件到二进制包
来源:cnblogs  作者:陶士涵  时间:2021/5/7 12:54:20  对本文有异议

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

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

常规用法:

  1. import _ "embed"
  2.  
  3. //go:embed hello.txt
  4. var s string
  5. func main() {
  6. print(s)
  7. }

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

  1. //go:embed hello1.txt hello2.txt
  2. var f embed.FS
  3. func main() {
  4. data1, _ := f.ReadFile("hello1.txt")
  5. fmt.Println(string(data1))
  6. data2, _ := f.ReadFile("hello2.txt")
  7. fmt.Println(string(data2))
  8. }

但是

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

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

类似我这样

  1. package static
  2. import "embed"
  3.  
  4. //go:embed templates/*
  5. var TemplatesEmbed embed.FS
  6. //go:embed js/*
  7. var JsEmbed embed.FS

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

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

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

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

 

原文链接:http://www.cnblogs.com/taoshihan/p/14738566.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号