Revel是一个高生产力的 Go 语言 Web 框架。框架源于java的 Play,文件结构是经典的MVC结构,比较清晰,是现在go语言中比较流行的web框架之一。

GORM 是一个Golang写的,开发人员友好的ORM库。可以简单直观的对 Mysql,Redis等等一些流行的数据库进行操作。

最近项目中需要一个集中处理id的功能,刚好准备尝试一下使用go,架构师推荐了这个框架,那么就来结合一下GORM做一个小小的使用入门。当然在revel的官方项目中,也给了一个例子:https://github.com/revel/examples/tree/master/orm/gorm

安装revel

假定这里你已经成功安装了go,并且已经配置好了 GOROOT 和 GOPATH,GOROOT是go语言编译、工具、标准库等的安装路径,GOPATH是go的工作目录,你的项目都是在这个目录下面。

安装框架

执行如下命令安装revel框架:

1
$ go get -u -v github.com/revel/cmd/revel

然后可以新建一个revel项目看看是否安装成功:

1
$ revel new myapp

如果提示revel命令找不到,可以找到revel的安装目录放到环境变量中再执行。

运行项目:

1
revel run myapp

打开浏览器访问

1
http://localhost:9000

it works,代表安装运行成功。

revel new myapp 命令生成的目录结构如下:

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

安装GROM

安装相关包

安装gorm包:

1
go get -u -v github.com/jinzhu/gorm

安装mysql驱动包:

1
go get -u -v github.com/go-sql-driver/mysql

安装

在revel中使用GROM

这里我们使用 https://github.com/revel/examples/tree/master/orm/gorm 官方例子来说明:首先把这个gorm代码拉到工作目录下

配置文件

打开config/app.conf文件,然后修改其中数据库配置:

1
2
3
4
5
db.driver=mysql # 数据库类型 : mysql, postgres, sqlite3
db.host=localhost # Use dbhost /tmp/gorm.db is your driver is sqlite
db.name=test #数据库名
db.password=root
db.user=root

model 文件说明

在model文件中添加一个user.go文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package models
import (
"github.com/jinzhu/gorm"
"golang.org/x/crypto/bcrypt"
)
// User model
type User `struct` {
gorm.Model
Name string `gorm:"size:255"`
Email string `gorm:"type:varchar(100);unique_index"`
HashedPassword []byte
Active bool
FileName string `gorm:"size:255"`
}
// SetNewPassword set a new hashsed password to user
func (user *User) SetNewPassword(passwordString string) {
bcryptPassword, _ := bcrypt.GenerateFromPassword([]byte(passwordString), bcrypt.DefaultCost)
user.HashedPassword = bcryptPassword
}

此文件是用来定义表的model,struct结构体中和你的数据表是一一对应的。注意到此model用到了另一个包,需要安装一下:

1
go get -u -v golang.org/x/crypto

controller 文件说明

在controllers 中添加一个init.go文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package controllers
import (
"github.com/revel/examples/orm/gorm/app/models"
gorm "github.com/revel/modules/orm/gorm/app"
"github.com/revel/revel"
)
func initializeDB() {
gorm.DB.AutoMigrate(&models.User{})
var firstUser = models.User{Name: "Demo", Email: "demo@demo1.com"}
firstUser.SetNewPassword("demo")
firstUser.Active = true
gorm.DB.Create(&firstUser)
}
func init() {
revel.OnAppStart(initializeDB)
}

这个文件相当于初始化操作,在请求到controller的时候会执行一下,这里是使用的gorm的一个gorm.DB.AutoMigrate方法,如果没有就创建表。当然,如果不需要的话是可以去掉。

在controllers 中添加一个app.go文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package controllers
import (
"github.com/revel/examples/orm/gorm/app/models"
gormc "github.com/revel/modules/orm/gorm/app/controllers"
"github.com/revel/revel"
)
type App struct {
gormc.TxnController
}
func (c App) Index() revel.Result {
var users = []models.User{}
c.Txn.Find(&users)
return c.RenderJSON(users)
}

这里只是列了一个最基本的find操作,更多的操作可以查看 https://jasperxu.github.io/gorm-zh/ grom中文手册。

view 文件说明

这里由于是演示,就不使用页面展示了,在 controller 中使用RenderJSON,直接以json展示。

运行项目:

1
revel run gorm

然后打开:http://localhost:9000/ 查看数据正常展示,打完收工。