环境搭建
go get -u -v github.com/astaxie/beego :针对源码
go get -u -v github.com/beego/bee :工具集
$ cd ~
$ vim .bashrc //在后一行插入
export PATH="$GOPATH/bin:$PATH" //然后保存退出
$ source .bashrc
创建项目
运行项目

结构说明
入口文件
package main
import (
//因为这句话,所以routers目录下的init方法执行,注册了路由
_ "classone/routers" //调用后面包里面的init函数(所有文件的)
"github.com/astaxie/beego"
_"classone/models"
)
func main() {
//静态资源和动态路由重合的情况下,静态资源路由优先匹配
//设置静态资源路径,默认是static,可通过这种方式修改或者增加
//beego.SetStaticPath()
beego.Run()
}
路由文件
package routers
import (
"classone/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/index", &controllers.IndexController{})
//高级路由:不使用默认get函数,自定义函数名称,但是必须首字母大写,注意:一旦指定自定义gte请求,不能访问默认的post方法
beego.Router("/high", &controllers.HighController{},"get:GetFunc")
//高级路由:两个请求访问一个方法
//beego.Router("/high", &controllers.HighController{},"get,post:GetFunc")
//高级路由:两个请求访问两个方法
//beego.Router("/high", &controllers.HighController{},"get:GetFunc;post:PostFunc")
//高级路由:所以请求访问一个方法
//beego.Router("/high", &controllers.HighController{},"*:AllFunc")
//高级路由:执行post请求优先执行PostFunc,不存在才执行AllFunc;相当于精确原则
//beego.Router("/high", &controllers.HighController{},"*:AllFunc;post:PostFunc")
//正则路由(了解即可,需要时候再查询)
//官方文档:https://beego.me/docs/mvc/controller/router.md
//mysql控制器
beego.Router("/mysql", &controllers.MysqlController{})
//orm控制器
beego.Router("/orm", &controllers.OrmController{})
//一般都是还使用OrmController,然后起方法别名这样避免创建多个控制器,即使这些控制器是在一个文件中
beego.Router("/update", &controllers.OrmUpdateController{})
}
控制器文件
package controllers
import (
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
func (c *MainController) Get() {
//传递数据,可以在views里面使用
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.Data["test"] = "区块连"
c.TplName = "test.html"
}
type IndexController struct {
beego.Controller
}
type HighController struct {
beego.Controller
}
func (c *HighController)GetFunc(){
c.Data["test"]="xixixi"
c.TplName = "test.html"
}
views文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>hello {{.test}}</h1>
<form method="post" action="/index">
<input type="submit">
</form>
</body>
</html>
模型文件
package models
import "github.com/astaxie/beego/orm"
type User struct {
//生成的表结构,首字母会变成小写
Id int
Name string
}
/**
此处必须在项目启动时候执行
1. 连接数据库要尽量先的执行
2. 如果写在别的地方,很容易出现重复注册,重复注册表会报错
*/
func init() {
//1.连接数据库,参数一是数据库别名:因为一个项目可能连接多个数据库,别名以作区分
orm.RegisterDataBase("default","mysql","root:123456@tcp(127.0.0.1:3306)/class1?charset=utf8")
//2.注册表
orm.RegisterModel(new(User))
//3.生成表 false:代表强制更新被禁止,一般都是禁止,因为不这样,每次运行都会清空表
//true:代表是否查看表创建的过程:说白了打印sql语句
orm.RunSyncdb("default",false,true) //会根据结构体生成一张表
}
mysql基本驱动操作数据库
package controllers
import (
"github.com/astaxie/beego"
"database/sql"
_"github.com/go-sql-driver/mysql"
)
type MysqlController struct {
beego.Controller
}
func (c *MysqlController) Get() {
conn, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/class1?charset=utf8")
if err!=nil {
beego.Info("连接错误",err)
return
}
/*
创建表
_,err = conn.Exec("create table userInfo(id int,name varchar(11)) ")
if err!=nil {
beego.Info("创建表错误",err)
return
}*/
//插入数据
/*_, err = conn.Exec("INSERT userInfo(id,name)VALUE (?,?)", 1, "lilei")
if err!=nil {
beego.Info("数据插入错误",err)
return
}*/
//查询语句
rows, e := conn.Query("SELECT * FROM userInfo")
if e!=nil {
beego.Info("数据查询错误",e)
return
}
var id int
var name string
for rows.Next() {
rows.Scan(&id,&name)
beego.Info(id,name)
}
conn.Close()
c.Ctx.WriteString("返回数据")
}
orm操作数据库
package controllers
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"classone/models"
)
//首先安装:go get github.com/astaxie/beego/orm
type OrmController struct {
beego.Controller
}
func (c *OrmController) Get() {
//查询
o := orm.NewOrm()
user:=models.User{Id:2}
err := o.Read(&user)
if err!=nil {
beego.Info("查询失败",err)
return
}
beego.Info(user.Name)
c.Ctx.WriteString("返回数据")
}
type OrmUpdateController struct {
beego.Controller
}
func (c *OrmUpdateController) Get() {
//插入
/*o := orm.NewOrm()
user:=models.User{}
//user.Id=2
user.Name="zq1"
_, e := o.Insert(&user)//返回值一是插入的行数
if e!=nil {
beego.Info("插入失败",e)
return
}*/
//更新:需要先查询出来再更新
o := orm.NewOrm()
user:=models.User{Id:2}
err := o.Read(&user)
if err!=nil {
beego.Info("查询失败",err)
return
}
user.Name="pf2"
_, e := o.Update(&user)
if e!=nil {
beego.Info("更新失败",e)
return
}
//同理有删除,delete,删除直接删除即可,不需要先查询
c.Ctx.WriteString("返回数据")
}