go 删除 文件 某行_Go实战--用echo嵌入静态资源

生命不止,继续 go go go !!!

使用 Go 开发应用的时候,有时会遇到需要读取静态资源的情况。比如开发 Web 应用,程序需要加载模板文件生成输出的 HTML。在程序部署的时候,除了发布应用可执行文件外,还需要发布依赖的静态资源文件。这给发布过程添加了一些麻烦。既然发布单独一个可执行文件是非常简单的操作,就有人会想办法把静态资源文件打包进 Go 的程序文件中。

参考地址:
http://fuxiaohei.me/2016/10/1/go-binary-embed-asset.html

文中提到了:
go-bindata
go.rice
esc

本片博客只会介绍go.rice,其余的会之后进行介绍的。

What’s an Embedded Resource?
An embedded resource in a application is a file that is included as part of the application. The file is not compiled, but is accessable from the code at run-time. Embedded resources can be any file type.

Languages as JAVA and C# support resources out of box. However, this is not the case for Golang. In order to emebed resource, we need to develop our own solution. Thankfully, there are couple of tools that are doing this for us.

参考地址:
http://blog.ralch.com/tutorial/golang-embedded-resources/

go.rice

go.rice is a Go package that makes working with resources such as html,js,css,images,templates, etc very easy.

github地址:
https://github.com/GeertJohan/go.rice

Star: 1107

获取:

go get github.com/GeertJohan/go.ricego get github.com/GeertJohan/go.rice/rice12

FindBox
funcation to access a particular resource bundler (directory).
The function is finding the correct absolute path for your resource files.

// find a rice.BoxtemplateBox, err := rice.FindBox("your-resource-directory")if err != nil {    log.Fatal(err)}// get file contents as stringtmpl, err := templateBox.String("your_asset.tmpl")if err != nil {    log.Fatal(err)}12345678910

Embedded resource as source code
作为源码嵌入资源
命令:

rice embed-go1

生成文件:

.rice-box.go1

Embedded resource as an archive
appends a resource as a zip file to already built executable
以zip的形式附加到已经存在的可执行文件

Embedded resource as an syso resource
This is experimental method that generates .syso file that is compiled by Go compiler. The following command generates the coff syso resource files per directory:

rice embed-syso1
go build -o rice append --exec 12

echo中使用go.rice

代码main.go:

package mainimport (    "net/http"    "github.com/GeertJohan/go.rice"    "github.com/labstack/echo")func main() {    e := echo.New()    // the file server for rice. "app" is the folder where the files come from.    assetHandler := http.FileServer(rice.MustFindBox("app").HTTPBox())    // serves the index.html from rice    e.GET("/", echo.WrapHandler(assetHandler))    // servers other static files    e.GET("/static/*", echo.WrapHandler(http.StripPrefix("/static/", assetHandler)))    e.Logger.Fatal(e.Start(":1323"))}12345678910111213141516171819202122

跟main.go同一级,新建一个文件夹app,放入文件file.txt

执行:

rice embed-go1

生成了 rice-box.go:

package mainimport (    "github.com/GeertJohan/go.rice/embedded"    "time")func init() {    // define files    file2 := &embedded.EmbeddedFile{        Filename:    "file.txt",        FileModTime: time.Unix(1511406219, 0),        Content:     string(""),    }    // define dirs    dir1 := &embedded.EmbeddedDir{        Filename:   "",        DirModTime: time.Unix(1511406219, 0),        ChildFiles: []*embedded.EmbeddedFile{            file2, // "file.txt"        },    }    // link ChildDirs    dir1.ChildDirs = []*embedded.EmbeddedDir{}    // register embeddedBox    embedded.RegisterEmbeddedBox(`app`, &embedded.EmbeddedBox{        Name: `app`,        Time: time.Unix(1511406219, 0),        Dirs: map[string]*embedded.EmbeddedDir{            "": dir1,        },        Files: map[string]*embedded.EmbeddedFile{            "file.txt": file2,        },    })}123456789101112131415161718192021222324252627282930313233343536373839404142

执行:

go build1

生成文件:embed_resources.exe

运行embed_resources.exe
删除app文件夹下的file.txt
浏览器访问http://localhost:1323/
可以看到file.txt文件

6362dc29ac2f52aa26f8b72102f82cad.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 运维自动化之路 Day2

学习内容: 1、模块初识 2、Pyc是什么 3、Python数据类型 4、数据运算 5、bytes数据类型 6、列表和元组的使用 7、字符串常用操作 8、字典的使用 1、模块初识 如果用 python 解释器来编程,从 Python 解释器退出再进入,那么你定义的所有的方法和…

aMDcpu不支持mysql_Oracle 11.2.0.1在AMD CPU 64位硬件,32位操作系统下的BUG 8670579

通过查询meatlink原因是在ORACLE11.2.0.1 AMD 64位CPU下安装了32位的操作系统,触发了bug 8670579,那要解决该问题只需打上86705bug 8670579硬件信息:CPU:AMD X6在执行dbca的时候也报错如下:[Oracleyorkshi ~]$ dbca## An unexpect…

《网络攻防》第6周作业

20169310 2016-2017-2 《网络攻防实践》第6周学习总结 教材学习内容总结 本周主要学习了《网络攻防---技术与实践》第5、6章的内容,主要学习了 TCP/IP网络协议攻击 和 网络安全防范技术 TCP/IP网络协议攻击概述 网络安全的属性:机密性 、完整性 、可用性…

nios ii小实验——第一个demo指导书

1.新建工程:打开Quartus II 13.0,点击File->New Project Wizard,点击Next后可以看到如图2所示的对话框,选择工程路径给工程命名(注意:工程名必须和顶层模块名一致,否则编译会报错&#xff09…

算法交易系列研究之一

一、算法交易的概念 (一)什么是算法交易 算法交易(Algorithmic Trading)是一种程序化交易方式,它将交易者和市场有机地联系起来。算法交易通常可以减少这两者之间的摩擦,或者说在一定程度上可以降低交易对市…

Spring3系列7- 自动扫描组件或Bean

原文地址 http://www.cnblogs.com/leiOOlei/p/3547589.html 一、 Spring Auto Scanning Components —— 自动扫描组件     1. Declares Components Manually——手动配置component 2. Auto Components Scanning——自动扫描组件 3…

CI Weekly #17 | flow.ci 支持 Java 构建以及 Docker/DevOps 实践分享

这周一,我们迫不及待写下了最新的 changelog —— 项目语言新增「Java」。创建 Java 项目工作流和其它语言项目配置很相似,flow.ci 提供了默认的 Java 项目构建流程模版,快去试试吧~ 最近 flow.ci 2017 招聘计划正式启动&#xff…

python选取tensor某一维_Pytorch的Tensor操作(1)

类型推断torch.randn():随机初始化a.type():返回类型type():返回基本类型isinstance() :检查类型cuda会影响数据类型标量维度(dimention)为0的标量标量的shape:返回类型为【】(空的list),返回长度也为0a.di…

201521123014 《Java程序设计》第8周学习总结

201521123014 《Java程序设计》第8周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。 泛型(编写的代码可被不同类型的对象所重用) Java中一个集合可以放任何类型的对象,因为…

【4.0】jdbcTemplate

1.什么是jdbcTemplate? 2.使用jdbcTemplate 3.crud操作 参考博文:http://blog.csdn.net/u014800380/article/details/64125653 4.采用配置文件的方式使用jdbcTemplate 参考博文:http://suyanzhu.blog.51cto.com/8050189/1563219/ 参考博文原文&#x…

基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文)

基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文) 导读:触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编…

【转】C#之继承

C#之继承 一.继承的类型  在面向对象的编程中,有两种截然不同继承类型:实现继承和接口继承  1.实现继承和接口继承  *实现继承:表示一个类型派生于基类型,它拥有该基类型的所有成员字段和函数。在实现继承中,派生…

java 学习计划_Java学习计划范例

Java学习计划范例Java学习计划好的计划是成功的一半,今天是在创新思维的第一节课,在这门课程的开始,一个有策略的、有目的性的计划是非常必要的,为了在以后的学习中能够达到最好的.效果,"坚持"是一把雕刻刀&…

SQL Server 2012自动备份

SQL 2012和2008一样,都可以做维护计划,来对数据库进行自动的备份。 现在做这样一个数据库维护的计划,每天0点对数据库进行差异备份,每周日0点对数据库进行完全备份,并且每天晚上10点删除一次过期备份(两个星…

mysql查逻辑表的分片规则_MySQL(19) Mycat分片(分库分表)配置

一、前言本文将基于主从复制,读写分离的环境基础上进行一个简单的分片(分库分表)配置二、Mycat分片配置mycat分片主要在scheam.xml,rule.xml这2个表中配置① scheam.xml:配置逻辑表以及对应使用的分片规则select user()这里小编主要对t_user表…

JS取消浏览器文本选中的方法

一 、问题的出现 今天在使用Easy-UI 的messager.alert()方法时候出现浏览器文本被选中,不知道其中是什么原因,如下图所示。 二 、解决思路 我最后的思路时在弹出消息框的同时,取消浏览器文本的选择,最后查找资料编写如下方法。  …

linux 脚本 java_Linux 通过脚本执行Java程序

由于要统计不同的IP,代码中应用了HashSet来存放IP地址。上述Java程序是在Windows下编写的,如果在Linux服务器上运行,只需要把上面文件的路径和文件更换了就可以了。2.编写好java程序后,将java程序打成jar文件(环境Linux)我将上述测…

Java开启/关闭tomcat服务器

© 版权声明:本文为博主原创文章,转载请注明出处 通过java代码实现Tomcat的开启与关闭 1.项目结构 2.CallTomcat.java package com.calltomcat.test;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;…

5、如何快速找到多个字典中的公共键(key) 6 如何让字典保持有序 7 如何实现用户的历史记录功能(最多n条)...

5、如何快速找到多个字典中的公共键(key) from random import randint,sample #随机取数 # a sample("ABCDEF",randint(5,6)) # print(a) # b1 {x:randint(1,4) for x in sample("ABCDEF",randint(3,6))} # b2 {x:randint(1,4) for x in sample("A…

KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机

一 .KVM 简介 KVM (名称来自英语: Kernel-basedVirtual Machine 的缩写,即基于内核的虚拟机) , 是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Li…