热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go语言Web框架Revel介绍

Revel是一个go语言写的web框架,这个框架源于java的Play!Framework.清晰的MVC结构,是现在go语言Web框架中优秀的框架。Revel的功能有1.热部署Re


Revel是一个go语言写的web框架,这个框架源于java的 Play! Framework.清晰的MVC结构,是现在go语言Web框架中优秀的框架。


Revel的功能有



1.热部署

Revel会自动编译你的go代码和templates模板文件,这个类似jsp功能。

2.简单的选择

Revel提供了一个工具包,用户日常的网络维护。也可以放弃这个工具包,直接访问底层应用。

3.轻量级线程

Revel建立在Go Http Server之上,使用Goroutine来处理请求。


Quick Start



安装revel之前,先安装go环境

安装还需要hg和git支持

设置GOPATH,然后把revel安装到GOPATH内

go get github.com/robfig/revel

编译revel

go build -o bin/revel github.com/robfig/revel/cmd

运行revel

bin/revel run github.com/robfig/revel/samples/chat

这里运行了一个revel的应用chat


Revel应用结构











1

appname                        #应用名称









2

    
/app                    #app目录









3

        
/controllers        #app下用于存放controllers的目录









4

        
/models                #存放model的目录









5

        
/views                #存放模板目录









6

            
/controllerName    #与controller名对应目录,其下存放模板文件









7

            
...









8

    
/conf                    #应用配置目录









9

    
/public                    #静态文件,css,js,图片









10

    
/tests                    #测试代码




Revel的MVC实现


Model


model就是一个普通结构体,存放属性


View



Revel的View通过 Go Templates来实现

模板存放于views目录下,命名方式是ControllerName/ActionName.html











1

{{/* app/views/Application/Register.html */}}









2
 









3

{{template "header.html" .}}









4
 









5

Register:











6











7

  
{{with $field := field "user.Username" .}}









8

    











9

      
Username:









10

      
*









11

      
{{$field.Error}}









12

    











13

  
{{end}}









14
 









15

  
{{/* other fields */}}









16
 









17

  











18

    
Cancel









19

  











20











21
 









22

{{template "footer.html" .}}




Controller


Controller:负责数据的绑定,验证,COOKIE和session的处理,业务处理及返回











1

/
/
 
app
/
controllers
/
app.go









2

type
 
Application struct {









3

    
*
revel.Controller  
/
/
创建一个Application的Controller,每一个Controller必须依赖
*
revel.Controller,在go中,相当于继承了
*
revel.Controller









4

}









5
 









6

func (c Application) Register() revel.Result {
/
/
定义一个Controller的Action









7

    
title :
=
 
"Register"









8

    
return
 
c.Render(title)









9

}









10
 









11

func (c Application) SaveUser(user models.User, verifyPassword string) revel.Result {









12

    
c.Validation.Required(verifyPassword)
/
/
通过Controller内部工具来验证验证









13

    
c.Validation.Required(verifyPassword 
=
=
 
user.Password)









14

        
Message(
"Password does not match"
)









15

    
user.Validate(c.Validation)









16
 









17

    
if
 
c.Validation.HasErrors() {









18

        
c.Validation.Keep()









19

        
c.FlashParams()









20

        
return
 
c.Redirect(Application.Register)









21

    
}









22
 









23

    
user.HashedPassword, _ 
=
 
bcrypt.GenerateFromPassword(









24

        
[]byte(user.Password), bcrypt.DefaultCost)









25

    
err :
=
 
c.Txn.Insert(&user)









26

    
if
 
err !
=
 
nil {









27

        
panic(err)









28

    
}









29
 









30

    
c.Session[
"user"

=
 
user.Username       
/
/
Session处理









31

    
c.Flash.Success(
"Welcome, "
 
+
 
user.Name)









32

    
return
 
c.Redirect(Hotels.Index)         
/
/
从定向到另外一个Action









33

}




Routing



在mvc中还有重要一点就是routing,Revel如何通过连接来定位Action呢,那需要Routing。

在conf下有一个routes文件用来配置,格式如下











1

方法    请求路径                对应Action









2

GET    /login                 Application.Login      # A simple path









3

GET    /hotels/?              Hotels.Index           # Match /hotels and /hotels/ (optional trailing slash)









4

GET    /hotels/{id}           Hotels.Show            # Extract a URI argument (matching /[^/]+/)









5

POST   /hotels/{<[0-9]+>id}   Hotels.Save            # URI arg with custom regex









6

WS     /hotels/{id}/feed      Hotels.Feed            # WebSockets.









7

POST   /hotels/{id}/{action}  Hotels.{action}        # Automatically route some actions.









8

GET    /public/               staticDir:public       # Map /app/public resources under /public/...









9

*      /{controller}/{action} {controller}.{action}  # Catch all; Automatic URL generation





支持Http的方法及WobSockets

对于Revel简单介绍到这里了


 



本篇来源:
http://blog.gcove.net/go%E8%AF%AD%E8%A8%80web%E6%A1%86%E6%9E%B6revel%E4%BB%8B%E7%BB%8D.html




推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了在使用vue和webpack进行异步组件按需加载时可能出现的报错问题,并提供了解决方法。同时还解答了关于局部注册组件和v-if指令的相关问题。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
author-avatar
手机用户2602938293
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有