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命令会出现如下的提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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为我们生成的目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
app                   项目根目录
├── app               MVC框架目录
│   ├── controllers   控制器目录
│   ├── init.go
│   ├── models        模型目录
│   ├── routes
│   ├── tmp
│   └── views         视图目录
├── conf
│   ├── app.conf      配置文件
│   └── routes        路由文件
├── messages          国际化目录
├── public            静态文件目录
└── tests

看起来好复杂的样子。其实对于开发者来说最常用的并没有那么多。最简单的public,这个目录下面的是css、img和js文件存放的地方。我们最常用到的就是app/conf/routesapp/app/controllers

现在我们在app/conf/routes这个文件中增加一个路由GET  /blogs  Blogs.Blogs

保存。在views目录下创建blogs目录并在其下创建blogs.html文件。这里只是作为示例使用,所以blogs.html文件是从index.html复制过来改了个名字的。

在controllers下创建我们自己的controller:blogs.go文件,代码如下:

package controllersimport "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上的开发一般是如下三步:

  1. 创建我们所需要的路由。
  2. 创建相关的view试图。
  3. 创建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之旅吧!

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/p/4770716.html

使用Revel(go)开发网站相关推荐

  1. vs2005+Access开发网站管理系统日志1

    很早就打算把学习VS2005+ACCESS开发网站的学习体会记录下来,方便自己将来查阅,也给想要学习的朋友抛砖引玉. 今天终于开始了,呵呵,希望大家支持  ! 首先打开VS2005,单击VS2005的 ...

  2. 思考:用开发移动app的观念来开发网站

    首先祝大家新年快乐.万事如意. 开发网站程序也有一些年头了,从最初的静态HTML+ JS,到后来的WebForm,然后过渡到现在的MVC. 由于最近做一些技术调研,也接触了很多移动开发,iOS和And ...

  3. java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...

    原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...

  4. node js 开发网站_使用Node JS开发网站

    node js 开发网站 You will have your own fully functional website running on "localhost" after ...

  5. python开发公司网站_用python开发网站

    我也不说其它的固定链接的方法,因为那样的教程网上一搜就一大把,我也就只说下我所遇到的问题.固定链接对于搜索引擎很友好,这都是大家知道的,前几天在装好WordPress程序后,想设置下固定链接,结果就遇 ...

  6. 前端:HTML/07/综合案例:月福首页,开发网站的流程,网站布局结构,排版准备,图片热点,网页多媒体

    开发网站的一个流程 1,业务员与客户进行沟通,包括:风格,功能(论坛,留言板,支付,用户登录等) 2,业务员与美工沟通,制作网页效果图(首页,列表页,内容页) 3,制作人员开始切图排版,排成网页形式的 ...

  7. 利用wojilu框架仿一个网站的全过程(Step by Step利用wojilu框架开发网站系列二 附源码)...

    被仿的网站和仿照后的网站 被仿的网站-易读 仿照后的网站-我读 仿这个网站的目的:为了实践一下新学习的轻量级asp.net web开发框架[我记录] ,该网站比较简单,适合入门. 实现章节 章节部分, ...

  8. 随想录(用python开发网站)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在Linux上,利用python开发网站是一件很简单的事情.目前,支持python进行网站开发 ...

  9. PHP开发网站全过程技术知识分析

    http://www.chinaz.com/web/2011/0423/174582.shtml 首先笔者需要申明一点的是,我们不是只用PHP来开发一个完整的网站程序,而是说在服务器端所用的语言是PH ...

  10. 教程:BootToGecko系统虚机与实机开发环境搭建及FirefoxOS设备使用和开发网站推荐;

    ..前段日子有阵一直在折腾FirefoxOS(B2G)移动操作系统.它是以Mozilla修改过的Linux(AOSP)也就是Gonk为基础.Gecko渲染为Web层.Gaia为用户层基于Web的开源操 ...

最新文章

  1. OpenCV(基础补充)图像二值化
  2. 李超线段树(Li-Chao Segment Tree)
  3. jmeter web监听结果_JMeter 性能测试基本过程及示例
  4. c语言患者住院管理系统,患者住院管理系统 C,C++.doc
  5. 模板设计模式,简单Java代码实现
  6. Python 断言和异常
  7. 化验室计算机管理制度,实验室试剂管理制度
  8. 面向对象的接口思想与函数式编程
  9. Dart 语言不如 Kotlin?这里列了 13 个原因
  10. 转载:AD的授权还原和主还原:深入浅出Active Directory系列(六)
  11. TFLite模型文件转C语言文件
  12. 我的第一个Java程序和Java简介
  13. 14.http 304优化,了解客户端缓存
  14. 学英语《每日一歌》之because of you
  15. Android使用NFC模拟IC卡
  16. Web前端开发需要具备哪些职责?需要掌握哪些技能?
  17. 雄关漫道真如铁,而今迈步从头越【我的2017】
  18. Vimeo上传功能中的SSRF
  19. win10任务栏卡死
  20. 什么是码原,波特率,比特率,带宽,容量,信噪比

热门文章

  1. 在服务端合并和压缩JavaScript和CSS文件[转]
  2. 从SQL Server中导入/导出 Excel 的基本方法
  3. OpenCV 累加一个三通道矩阵的所有元素
  4. china-pub春季教材展,给力优惠,买二赠一
  5. HihoCoder1449 后缀自动机三·重复旋律6
  6. 一周水题集锦 2017 9.4
  7. Ext.js入门:TabPanel组件(八)
  8. com和dll(一)
  9. Asterisk的配置详解
  10. C# 将已有程序封装为DLL文件,供其他程序调用