关键词:
Revel很好的利用了Go语言的goroutine,把每一个request都分配到了goroutine里。不用再写一大堆的回调。如果你写过nodejs的话就会深刻的体会到callback hell是什么样子的。正是由于Revel有了goroutine,Revel的性能也有了很大的提升。官网号称请求的吞吐量是Rails的3到10倍。Revel的性能好,在开发方面也提供了非常全面的工具。常用的路由、模板、session、参数解析、等几乎都有,甚至还提供了一个测试框架。而这些东西的开发都是模块化的,也就是你可以用自己的实现来代替上述提到的工具。比如,用你觉得合适的活着自己开发的router来代替默认的路由。
这里默认的你已经配置好了go env。在GOPATH所指定的目录中的一个里,运行命令go get github.com/revel/revel之后再运行
go get github.com/revel/cmd/revel。好的这个时候你会报错说无法import到websocket这个包。感谢伟大的全国防火墙,这部分的代码被屏蔽了。虽然直接下载不行,但是代码在github上还是有的。所以,还是可以手动下载,之后配置上的。
这里就需要知道go的另一个很好的工具:http://gopm.io/。这是一个类似于nodejs的npm一样的工具。他会根据版本号来下载对应的go包,而不是git、hg什么的。你可以下载这个工具,也可以点download项进入下载页面(这里:http://gopm.io/download)。然后在import path里输入 golang.org/x/net,点击下载。这个包就下载下来了。
下载成功后,解压下载包:
很大的一包。最后就是我们需要的websocket包。我们准备把全部的这些包都放在需要的目录下。这个时候回头看看报错内容:golang.org/x/net/websocket。但是在我们的GOPATH/src目录下是没有这个目录的。所以我们需要创建websocket之前的全部目录。之后把我们上面解压出来的全部的内容拷贝过去。这个问题就可以解决了。最后,手动build一下revel。执行命令:go build github.com/revel/cmd/revel。之后就会在bin目录下生成revel的二进制可执行文件。到这里revel的安装就算完成了。
完成安装后,运行revel命令会出现如下的提示:
localhost:golang user$ revel ~ ~ revel! http://revel.github.io ~ usage: revel command [arguments] The commands are: new create a skeleton Revel application run run a Revel application build build a Revel application (e.g. for deployment) package package a Revel application (e.g. for deployment) clean clean a Revel application's temp files test run all tests from the command-line Use "revel help [command]" for more information.
运行revel new命令,revel会为你生成一个默认的站点。命令如下:revel new github.com/first_test/app。应为这个站点只是测试用的,我还要生成更多的其他的站点,所以这里的目录略复杂一点。你可以根据自己的需要决定目录。大体的目录结构式这样的:
运行命令revel run,例如:revel run github.com/first_test/app。这个时候一个站点已经运行起来了。在浏览器中输入localhost:9000,回车。你会看到:
现在安装和配置已经完成。
开发之前先认识一下revel为我们生成的目录结构:
app 项目根目录 ├── app MVC框架目录 │ ├── controllers 控制器目录 │ ├── init.go │ ├── models 模型目录 │ ├── routes │ ├── tmp │ └── views 视图目录 ├── conf │ ├── app.conf 配置文件 │ └── routes 路由文件 ├── messages 国际化目录 ├── public 静态文件目录 └── tests
看起来好复杂的样子。其实对于开发者来说最常用的并没有那么多。最简单的public,这个目录下面的是css、img和js文件存放的地方。我们最常用到的就是app/conf/routes和app/app/controllers。
现在我们在app/conf/routes这个文件中增加一个路由GET /blogs Blogs.Blogs
保存。在views目录下创建blogs目录并在其下创建blogs.html文件。这里只是作为示例使用,所以blogs.html文件是从index.html复制过来改了个名字的。
在controllers下创建我们自己的controller:blogs.go文件,代码如下:
package controllers
import "github.com/revel/revel"
type Blogs struct {
*revel.Controller
}
func (c Blogs) Blogs() revel.Result {
return c.Render()
}
现在重启服务,在浏览器中输入localhost:9000/blogs就会出现开始的时候出现的index页的内容。这里出现index的内容,如前所述,是因为我们直接把index页的内容拷贝过来的。
由此可见,在revel上的开发一般是如下三步:
- 创建我们所需要的路由。
- 创建相关的view试图。
- 创建controller。
完成以上三步就已经添加了我们自己需要的东西了。其他的内容的使用可以参考官网的文档。
还有一点需要注意。先看下图:
我们在添加路由的文件中需要注意最后的一行。* /:controller/:action :controller.:action
*表示的是网络请求的方法:GET、POST、DELETE等,后面的/:controller/:action是网络请求的路径,最后的:controller.:action是用户定义的controller和在其中的action。所以按照这个路径访问的内容,如果controller和action都存在的话,是可以访问到的。也就是说,如果我们没有添加任何的路由,只用这个默认的生成的路由也是可以访问到blogs的。可以试一下,在浏览器访问localhost:9000/blogs/blogs。同样可以显示我们添加的blogs.html。这个路径的第一个blogs就是controller的名字(当让controller的首字母是会大写的)。后面的一个blogs对应的就是controller的action也就是Blogs结构的Blogs方法。
controller的数据如何能传给模板呢。修改blogs.html中的
<h1>It works!</h1>
为
<h1>{{.greeting}}</h1>
修改Blogs的代码:
func (c Blogs) Blogs() revel.Result {
var greeting = "你好REVEL!"
return c.Render(greeting)
}
这次不用重启服务了。对于路由、controller和view的修改是不用重启服务的。Revel支持hot-reload。修改后的内容都会自动重新编译。刷新浏览器。
开启你的Revel之旅吧!
go语言图形界面开发:go版gtk
...一个简单的空白窗口06、控件07、信号处理glade08、glade的使用常用控件09、窗口10、标签11、图片控件12、进度条13、按钮14、行编辑15、布局16、对话框定时器17、定时器的使用常用事件18、鼠标事件19、鼠标事件应用—窗口移动20... 查看详情
go语言图形界面开发:go版gtk
...一个简单的空白窗口06、控件07、信号处理glade08、glade的使用常用控件09、窗口10、标签11、图片控件12、进度条13、按钮14、行编辑15、布局16、对话框定时器17、定时器的使用常用事件18、鼠标事件19、鼠标事件应用—窗口移动20、... 查看详情
go语言之doc文档
...代码共享来说,文档是一个可以帮助开发者快速了解以及使用这些代码的一个教程,文档越全面、越详细,入门越快,效率也会更高。在Go语言中,Go为我们提供了快速生成文档以及查看文档的工具,让我们可以很容易地编写查... 查看详情
为什么字节跳动全面使用go语言?
...水涨船高。以字节跳动为例,Go语言是字节跳动内部使用最多的编程语言。为啥?因为字节跳动更看重效率,上手简单,学习难度低。另外,Goroutine和Channel这两个神器可以很好解决并发和异步编程 查看详情
为什么字节跳动全面使用go语言?
...水涨船高。以字节跳动为例,Go语言是字节跳动内部使用最多的编程语言。为啥?因为字节跳动更看重效率,上手简单,学习难度低。另外,Goroutine和Channel这两个神器可以很好解决并发和异步编程 查看详情
revelgolang的全栈开发框架
revel是一个golang的全栈web开发框架,支持代码开发阶段的reload,友好的迁移(基于mux支持原有代码的方便迁移)无状态,内置强大的cache,template,job,参数解析,路由安装 goget-ugithub.com/revel/cmd/revel创建应用revelnew-amy-app-r效果&n... 查看详情
全流程开发go实战电商网站高并发秒杀系统
...进行梳理,明确系统具体需求,讲解系统原型设计工具的使用,并结合秒杀系统进行整体架构设计。 2-1需求分析  查看详情
google,b站,为什么全面使用go语言?
...水涨船高。以字节跳动为例,Go语言是字节跳动内部使用最多的编程语言。为啥?因为字节跳动更看重效率,上手简单,学习难度低。另外,Goroutine和Channel这两个神器可以很好解决并发和异步编程 查看详情
google,b站,为什么全面使用go语言?
...水涨船高。以字节跳动为例,Go语言是字节跳动内部使用最多的编程语言。为啥?因为字节跳动更看重效率,上手简单,学习难度低。另外,Goroutine 和Channel这两个神器可以很好解决并发和异步编 查看详情
orm哪家强?java,c#,php,python,go逐一对比,网友直呼:全面客观(代码片段)
最近一段时间,我使用golang开发了一个新的ORM库。为了让这个库更好用,我比较研究了各语言的主流ORM库,发现有一些语言的ORM库确实很好用,而有另外一些语言的库那不是一般的难用。于是...前言最近一段时间,我使用golang开... 查看详情
21天网站建设实录(雨辰资讯)高清pdf扫描版
《21天网站建设实录》以网页设计师的项目开发为背景,以“阿里里在线购物”商业网站的开发过程为流程,通过21天的任务期限,以一天一项任务、一天掌握一项技能项目实战的学习模式,全面讲解了一个网站立项、策划、制... 查看详情
为什么选择go语言go语言都能做什么产品
...构建系统、服务器,特别是微服务的热门选择。 正如使用其它新兴语言或技术一样,我们在早期的实验阶段经历了好一阵子的摸索期。Go语言确实有自己的风格与使用习惯,尤其是对于从面向对象语言(比如Java)或脚本语言... 查看详情
go语言适合做啥?
...其他的语言成分。参考技术A1、服务器编程:以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。2、分布式系统、数据库代理器、中间件:例如Etcd。3、网络编程:这一... 查看详情
go语言的下一个大版本:go2.0被安排上了(全面兼容1.x,改进错误处理和泛型这两大主题)
今年 8月Go开发团队公布了 Go2.0的设计草案,包括错误处理和泛型这两大主题。现在备受瞩目的Go2.0又有了新动向——昨日Go开发团队在其官方博客表示,Go2已经被安排上了!目前Go2已进入确定变更提案的阶段,并公... 查看详情
orm哪家强?java,c#,php,python,go逐一对比,网友直呼:全面客观
前言最近一段时间,我使用golang开发了一个新的ORM库。为了让这个库更好用,我比较研究了各语言的主流ORM库,发现有一些语言的ORM库确实很好用,而有另外一些语言的库那不是一般的难用。... 查看详情
一些开发常用到的工具网站
解析jsonhttps://www.json.cn/json转为go结构体https://mholt.github.io/json-to-go/https://www.codeutils.top/#/jsonhttps://oktools.net/json2gosql语句转go结构体http://stming.cn/tool/sql2go.html给变量取名https://unbug.github.io/codelf/https://translate.google.cn/参考 查看详情
搭建windows下的go开发环境
...。zip的是免安装的,解压在配置一些环境变量之后就可以使用,msi的则是安装包版本的,安装的时候会设置好对应的环境变量。为了方便,我就下了x64上的 查看详情
tsingsee青犀视频开发景区网站如何通过go语言html生成pdf?(代码片段)
...数,并生成PDF,供下载查看。由于在服务端我们使用的是Go语言制作,所以这里我们用的一个go-wkhtmltopdf来实现该功能。生成第一个PDF可以是想要的格式(没有问题):第二次生成PDF就会出现下图错误的情... 查看详情