使用Revel(go)开发网站

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

  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

时间: 2024-10-26 16:06:33

使用Revel(go)开发网站的相关文章

如何使用 velocity 模板引擎开发网站

模板 开发网站-velocity模板引擎">基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI(界面)部分,然后由程序员在其上加入代码显示逻辑(比如循环,判断显示数据结果).也就是通常的 jsp 页面制作,当然这部分可以由美工完成模板,然后由 jsp 工程师再继续以它为原型创建相应的 jsp 页面. 2:功能确定后,由美工设计网页的UI(界面)

设计参考:100个优秀的国外设计开发网站

100个优秀的国外设计开发网站,涵盖了Web设计,平面设计,Flash和Flex,设计资源等网站推荐. 常用设计网站   Spunk United 非常出色的杂志,里面提供的都是世界顶级设计师的专访,灵感以及文章还有更多. FreeLance Switch 这个站点上的所有资源都是开放免费的,你肯定要知道:) Computer Arts 这是一个非常优秀的网络杂志,中文版杂志是<Computer Arts 数码艺术>,相信设计者都有订阅这份杂志. David Airey 一位专业的图形以及lo

技巧:PHP开发网站程序代码的优化方法

如何消灭或优化那PHP开发网站程序的代码呢? 这一点上我个人最主要的经验只有两点,一是消除错误的或低效的循环:二是优化数据库查询语句.其实还存在一些其它的优化细节,比如"str_replace比ereg_replace快"."echo比print快"等等.这些我暂时都放在一边,稍后我会提到用缓存来对付过于频繁的IO. 下面我们将三个功能相同,但程序写法不同的函数的效率(消耗的时间)进行对比. webjx.php <?php require_once('Benc

用FrontPage2003来开发网站

frontpage     开发网站    1. "拆分"视图     2.改进的图形支持     3.多编辑器配置     4.Macromedia Flash 支持     5.行为     6.交互式按钮     7.快速标记工具     8.智能感知      9.键入帮助     10.代码段

如何快速开发网站?

开发网站 ,一般是如下过程: 找美工画图 进行图片切分 开发人员添加内容 现在还用JSP来做网页,当然属于...那啥的事情. 今天看看不一样的体验,稍有HTML基础,马上就可以照葫芦画瓢了. 第一步:找美工画图,第二步图片切分 这两步合成一步,到网上找模板,假设我们就看上这个模板了. http://www.cssmoban.com/cssthemes/88.shtml 点击下面的地址http://down.cssmoban.com/cssthemes/dating-web-template-5.

开发网站如何进行访问者网络身份认证

问题描述 开发网站如何进行访问者网络身份认证 我们学校购买了知网数据库,每次用校园网登陆知网时,网页顶部就提示"欢迎,武汉理工大学的朋友",请问这是怎样实现的?

存储-询问在做网站时,数据库都要做些什么,哪位能详解下(只是学习型开发网站)

问题描述 询问在做网站时,数据库都要做些什么,哪位能详解下(只是学习型开发网站) 不知从何下手.......是要写存储过程.视图..需要自己建立有内容的表格吗,一个很简单网站 类似慕课平台(我们学习做的,对于你们应该很简单)不要复杂的思路,与技术 解决方案 首先,客户端看你要用什么语言,PHP或JS. 数据库可MYSQL或oracel. 建立网站其实做得最多的还是增删改查的操作.学习型开发网站?存储过程.视图.这些不是一定需要的,得看你开发过程中的实际要求. 前期关键是要定义好数据库的表,以及网

设计-一个人开发网站的苦恼

问题描述 一个人开发网站的苦恼 10C 公司就我一个人开发网站,一般是领导想到什么功能我就开发什么功能.虽然功能已经实现,但开发出来的网站比较乱,维护困难.性能差.扩展性低.我就想开发之前是不是应该先设计再开发会解决我的问题.我去网上搜了好多资料,看见了软件统一过程(RUP).经过学习感觉是我想要的.但是在用起来又感觉设计比较多余.是我找错了方向还是没有正在理解软件统一过程.请大家指条明路. 解决方案 我觉得你应该跳槽,团队合作才是王道 解决方案二: 首先应该先把需求定下来,,不然开发起来会很麻

使用artTemplate模板开发网站(node.js + express环境)

本文详细说明了如何利用artTemplate模板引擎开发网站,主要是搭配node.js.express环境进行讲解.同时在文章开头会简单介绍了模板.模板引擎概念,以及artTemplate模板引擎的发展史,比较熟悉模板.模板引擎的读者可以跳过这部分.artTemplate的语法将放在文章最后稍作说明,因为语法不是本文的重点所在,可以参考其它文章详细了解语法知识. 为什么要写作这篇文章? 在学习artTemplate模板时,大家自然而然地想到参考artTemplate官方公布的文档,也就是托管在G

html网页-HTML、CSS开发网站问题

问题描述 HTML.CSS开发网站问题 如何隐藏网页中的文字,当我按到那段文字的标签时会显示那些文字(如:腾讯qq空间里个人档中个人资料一样,不点击文字隐藏,点击文字显示.如何在将鼠标的光标移动到滚动文字时文字会停止滚动?希望大神指教!谢谢! 解决方案 光用html和css解决不了问题,使用jquery,点击文字时触发事件onclick,在onclick事件的事件处理程序中控制文字的显示.在滚动的文字上绑定事件onmouseover,在onmouseover的事件处理程序中使用css或js函数阻