使用Beego构建一个web项目

原文链接: https://juejin.im/post/5a31e9ef6fb9a045186abfc5

学习go语言也有一段时间了,正好手头自己家公司的官网,算一个无关紧要的小项目,就用go语言来练练手,实战一个。

在框架上选择了成熟的beego项目。

Beego

Beego提供了完整的MVC解决方案和项目构建工具,通过bee命令可以简单地创建、编译、执行、发布一个WEB或者API项目。官方的文档相当完整详尽而且全是中文,真是好得不要不要的。


###创建项目

第一步当然是创建一个新项目。此处基本是按照文档的走。

首先安装beego

go get github.com/astaxie/beego
复制代码

beego的安装路径是在GOPATH/bin目录中。官方建议将此目录添加到path,其实不添加也一样可以用。

项目目标路径位于GOPATH/src/xohome,新建项目的命令如下:

src$ ../bin/bee new xohome
复制代码

然后会自动在src/xohome下生成响应的项目结构,具体结构请参照文档,在此不细说了。

至此项目就已经可以执行了,在xohome下执行命令

../../bin/bee run
复制代码

然后访问默认的8080端口,就可以看到beego的logo了。


###Controller与模板

在新建好的项目中,已经有了默认的controller,位于controller目录下的default.go文件。还有默认的router.go文件。

type MainController struct {
	beego.Controller
}

func (c *MainController) Get() {
	c.Data["Website"] = "beego.me"
	c.Data["Email"] = "[email protected]"
	c.TplName = "index.tpl"

}
复制代码

default.go文件的默认内容如上。beego基于go语言自带的模板对页面进行渲染。在默认创建的目录结构中,模板文件位于views目录下,而静态资源则位于static目录下。若要访问静态资源,直接访问/static/...即可。

很多时候都是通过对controller结构体进行赋值来进行操作。这一点上与java的基于方法进行操作有较大的不同。当然也有很多常见的方法。比如下面这个用来提交表单的controller:

type SubmitController struct {
	beego.Controller
}

func (c *SubmitController) Get(){
	c.TplName = "start.tpl"
}

type ResultJson struct {
	State int
	Message string
}

func (c *SubmitController) Post(){
	var project = models.Projects{};
	project.Money = c.GetString("money","")
	project.About = c.GetString("about","")
	project.Time = c.GetString("time","")
	project.Contact = c.GetString("contact","")
	project.Name = c.GetString("name","")
	project.Type,_ = c.GetInt("type",0)

	o := orm.NewOrm()
	o.Using("xohome")

	_,e := o.Insert(&project)

	if(e == nil){
		res := ResultJson{State:0,Message:"success"}
		c.Data["json"] = res
		c.ServeJSON()
		return
	}else{
		res := ResultJson{State:1,Message:"处理发生错误"}
		c.Data["json"] = res
		fmt.Print(e.Error())
		c.ServeJSON()
		return
	}


}
复制代码

代码很简单,走Get方法的时候返回个页面,走Post方法的时候保存至数据库并返回一个json。

controller需要在router中进行注册,默认案例如下:


func init() {
    beego.Router("/", &controllers.MainController{})
    beego.Router("/start", &controllers.SubmitController{})
}
复制代码

在init()方法中进行注册,在默认的main.go文件中,有如下引用:

_ "xohome/routers"
复制代码

来执行此方法。


###数据库操作

有眼尖的朋友已经见到上一部分中的数据库操作。这是beego提供的orm模块。

这个orm模块用起来也是很简单,首先需要引入一个数据库驱动,比如mysql的驱动:

_ "github.com/go-sql-driver/mysql"
复制代码

然后找个地方初始化一下orm的配置:

func init() {
	orm.RegisterDriver("mysql", orm.DRMySQL)
	orm.RegisterDataBase("default", "mysql", "username:password@tcp(mysql.com:3449)/xohome?charset=utf8")
}
复制代码

我将这两行代码放在了main.go文件中,其实只要能够保证一开始就执行,放在哪都差不多。

然后的操作代码就如上一段所示

o := orm.NewOrm()
o.Using("default")
_,e := o.Insert(&project)

复制代码

是不是特别的简单呢?插入的表就是project结构体的名称。beego还支持一对多,多对多等映射,自定义表名,事务控制等高端功能,可以去查看官方文档进一步学习。


###项目部署

beego提供了打包的工具,只要执行命令如下:

GOOS=linux ../../bin/bee pack
复制代码

看过我之前的文章应当知道,GOOS是go语言跨平台编译的参数,指定为linux就可以打包成linux下可用的tar.gz文件。然后直接上传上去解压执行即可。继承了go语言部署简单的传统。


###结束语

恩,没有了。

本来就是一个非常简单,只有两个页面的展示性首页。但是充分展示了go语言开发web应用的潜力。go完整的工具链,简洁的api风格,方便的部署方式相信也有所体会。

接下来还要继续去研究我的文件服务,这个东西就到此为止了。

你可能感兴趣的:(使用Beego构建一个web项目)