Go frame simple(6) beego

1 beego简介

beego 是一个快速开发 Go 应用的 HTTP 框架,可以用来快速开发 API、Web 及后端服务等各种应用。

beego github地址:
https://github.com/beego/beego
bee开发工具:
https://github.com/beego/bee

2 beego下载安装

下载beego,输入命令:

go get -u github.com/beego/beego/v2

下载bee,输入命令:

go get -u github.com/beego/bee/v2

查看bee版本,输入命令:

bee version

Go frame simple(6) beego_第1张图片

3 beego入门

3.1 hello world

第1步:终端输入命令:
bee new chapter6
Go frame simple(6) beego_第2张图片
第2步:打开项目chapter6,结构如下:
Go frame simple(6) beego_第3张图片
第3步:终端进入项目chapter6,下载go mod依赖的包,输入命令:

go mod tidy

第4步:运行输入命令:

bee run

Go frame simple(6) beego_第4张图片
最后浏览器输入http://127.0.0.1:8080/
Go frame simple(6) beego_第5张图片

3.2 路由

3.2.1 简单函数的路由

第1步:输出hello world函数:

func DoHello(ctx *context.Context)  {
	ctx.Output.Body([]byte("hello world!"))
}

注册路由:

	beegoWeb.Get("/hello", controllers.DoHello)

第2步:postman请求:
Go frame simple(6) beego_第6张图片

3.2.2 简单分组路由

第1步::买家、卖家路由区分:

	beegoWeb.Router("/buy", &controllers.BuyerController{})
	beegoWeb.Router("/shopper", &controllers.SellerController{})

买家:

type BuyerController struct {
	beego.Controller
}
func (c *BuyerController) Get() {
	c.Ctx.WriteString("我想买一辆超级跑车!")
}

卖家:

type SellerController struct {
	beego.Controller
}
func (c *SellerController) Get() {
	c.Ctx.WriteString("我有奔驰、宝马、法拉利...")
}

第2步:postman请求:
Go frame simple(6) beego_第7张图片
Go frame simple(6) beego_第8张图片

3.2.3 分组路由

	userNS := beegoWeb.NewNamespace("/user",
		beegoWeb.NSRouter("/list", &controllers.UerController{},"get:ListUser"),
		beegoWeb.NSRouter("/add", &controllers.UerController{},"get:AddUser"),
		beegoWeb.NSRouter("/del", &controllers.UerController{},"get:DelUser"),
		beegoWeb.NSRouter("/update",  &controllers.UerController{},"get:UpdateUser"),
	)

具体实现参考3.3。

3.3 ORM

这里数据库采用 MqSql。
连接数据库客户端 Navicat for MySql。

数据库 db_test
表:tb_user
模型:User

3.3.1 安装mysql驱动

go get github.com/Go-SQL-Driver/MySQL

3.3.2 modle与表关联(User)

第1步:创建表:

CREATE TABLE `tb_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '系统用户名称',
  `user_password` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '系统用户密码',
  `role_id` int(255) DEFAULT NULL COMMENT '角色',
  `user_phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '手机号',
  `reg_time` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登记时间',
  `user_status` int(1) NOT NULL DEFAULT 0 COMMENT '状态(0:无效;1:有效)',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统管理员帐号' ROW_FORMAT = Dynamic;

第2步:定义user的model:

type User struct {
	Id           int64
	UserName     string
	UserPassword string
	RoleId       int8
	UserPhone    string
	RegTime      string
	UserStatus   int8
}

字段:
在mysql中要小写,
在model中要大写。
大写会对应小写,需加下划线。如:

UserName      user_name

3.3.3 连接数据库

	// 读取配置信息
	host,_ := beego.AppConfig.String("dbhost")
	port,_ := beego.AppConfig.Int("dbport")//数据库端口

	dbname,_  := beego.AppConfig.String("db")//数据库名
	username,_  := beego.AppConfig.String("dbuser")//账号
	password,_  := beego.AppConfig.String("dbpassword")

	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&loc=Local", username, password, host, port, dbname)

	//注册mysql Driver
	orm.RegisterDriver("mysql", orm.DRMySQL)

	// 注册数据库的连接 default
	orm.RegisterDataBase("default", "mysql", dsn)

	orm.RegisterModel(new(models.User))

	// 打开调试模式,开发的时候方便查看orm生成什么样子的sql语句
	orm.Debug = true
	

3.3.4 新增用户

第1步:新增用户:孙权

func (c *UerController)AddUser() {
	fmt.Println("AddUser")
	user:=&models.User{
		UserName: "孙权",
		UserPassword: "123456",
		UserPhone: "15693939393",
		RoleId: 1,
		RegTime: "2022-03-10",
		UserStatus: 1,
	}
	//1 orm对象
	o := orm.NewOrm()

	//2 插入记录
	n,err:=o.Insert(user)

	if err == nil && n > 0 {
		res:=&models.ResponseData{
			Code: 0,
			Msg: "插入成功!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
	}else{
		res:=&models.ResponseData{
			Code: 0,
			Msg: "插入失败!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
	}
}

第2步:postman请求:
Go frame simple(6) beego_第9张图片
第3步:查看数据库:
在这里插入图片描述

3.3.5 查询用户

第1步:查询所有的用户:

//用户列表
func (c *UerController)ListUser() {
	fmt.Println("ListUser")
	var userList []*models.User
	//c.GetString()
	//1 orm对象
	o := orm.NewOrm()
	qs := o.QueryTable(common.TbUser)

	//2 查询前30条记录
	count, err := qs.Limit(30).All(&userList)
	if err != nil {
		res:=&models.ResponseData{
			Code: 0,
			Msg: "查询失败!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
		return
	}
	//查询的条数大于0
	if count > 0 {
		for i := 0; i < len(userList); i++ {
			name:=userList[i].UserName
			fmt.Println("user:"+name)
		}
		c.Data["json"] = &userList
		c.ServeJSON()
	}
}

第2步:postman请求:
Go frame simple(6) beego_第10张图片

3.3.6 修改用户

第1步:修改用户孙权的密码为654321:

func (c *UerController)UpdateUser() {
	//获取参数
	id:=c.GetString("id")
	password:=c.GetString("password")
	if id==""||id=="null"|| password==""||password=="null" {
		res:=&models.ResponseData{
			Code: 0,
			Msg: "参数为空!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
		return
	}
	//1 orm对象
	o := orm.NewOrm()
	iId,_:=strconv.ParseInt(id,10,64)

	//2 查询用户
	user:=models.User{
		Id:iId,
	}
	err1:=o.Read(&user)
	if err1 != nil  {
		res:=&models.ResponseData{
			Code: 0,
			Msg: "用户不存在!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
		return
	}

	//3 更新记录
	user.UserPassword= password
	n, err2 := o.Update(&user)
	if err2 == nil && n > 0 {
		res:=&models.ResponseData{
			Code: 0,
			Msg: "更新成功!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
	}else{
		res:=&models.ResponseData{
			Code: 0,
			Msg: "更新失败!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
	}
}

第2步:postman请求:
Go frame simple(6) beego_第11张图片

第3步:查看数据库:
在这里插入图片描述

3.3.7 删除用户

第1步:删除用户孙权:

func (c *UerController)DelUser() {
	//获取参数
	id:=c.GetString("id")
	if id==""||id=="null"{
		res:=&models.ResponseData{
			Code: 0,
			Msg: "参数为空!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
		return
	}
	//1 orm对象
	o := orm.NewOrm()

	iId,_:=strconv.ParseInt(id,10,64)
	user:=models.User{
		Id: iId,
	}
	//2 删除记录
	n, err := o.Delete(&user)
	if err == nil && n > 0 {
		res:=&models.ResponseData{
			Code: 0,
			Msg: "删除成功!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
	}else{
		res:=&models.ResponseData{
			Code: 0,
			Msg: "删除失败!",
		}
		c.Data["json"] = &res
		c.ServeJSON()
	}
}

第2步:postman请求:
Go frame simple(6) beego_第12张图片
第3步:查看数据库:
在这里插入图片描述
代码详见:
https://gitee.com/linghufeixia/go-frame-simple

你可能感兴趣的:(Go,golang,安全,git)