beego 是一个快速开发 Go 应用的 HTTP 框架,可以用来快速开发 API、Web 及后端服务等各种应用。
beego github地址:
https://github.com/beego/beego
bee开发工具:
https://github.com/beego/bee
下载beego,输入命令:
go get -u github.com/beego/beego/v2
下载bee,输入命令:
go get -u github.com/beego/bee/v2
查看bee版本,输入命令:
bee version
第1步:终端输入命令:
bee new chapter6
第2步:打开项目chapter6,结构如下:
第3步:终端进入项目chapter6,下载go mod依赖的包,输入命令:
go mod tidy
第4步:运行输入命令:
bee run
第1步:输出hello world函数:
func DoHello(ctx *context.Context) {
ctx.Output.Body([]byte("hello world!"))
}
注册路由:
beegoWeb.Get("/hello", controllers.DoHello)
第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("我有奔驰、宝马、法拉利...")
}
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。
这里数据库采用 MqSql。
连接数据库客户端 Navicat for MySql。
数据库 db_test
表:tb_user
模型:User
go get github.com/Go-SQL-Driver/MySQL
第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
// 读取配置信息
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
第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()
}
}
第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()
}
}
第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()
}
}
第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请求:
第3步:查看数据库:
代码详见:
https://gitee.com/linghufeixia/go-frame-simple