Golang入门系列(十三)如何用Beego快速开发web应用

时间: 2022-07-26 17:42:31 浏览次数:326

接着之前的内容,前面已经讲过很多Golang的基础语法,mysql的使用,redis的使用,也讲了orm框架,如何创建一个webapi 服务等等,感兴趣的可以看看以前的文章。今天要来说一说,如何用beego开发web应用。

介绍

它是由国内团队开发的开源框架,文档基本都是中文,简单易懂。

安装

需要安装 Beego 和 Bee 的开发工具:

$ gogetgithub.com/astaxie/beego$ gogetgithub.com/beego/bee

注意:

beege和bee是两个概念。beego是框架,bee是工具,是命令。在安装Beego前,先确认是否将$GOPATH/bin写入GO环境中。创建应用

创建一个名为webDemo的应用

$ beenewwebDemo//创建一个web应用$ bee api webDemo //创建一个api应用编译运行

进入webDemo目录中,执行bee run,就会完成编译、运行:

$ bee run

成功后,打开浏览器访问:http://localhost:8080,可以看到如图:

项目结构

以上就beego 的安装和运行简单的介绍完了,下面我们就通过订单查询和新增的例子来学习学习如何用beego开发web应用。一般的 beego 项目的目录如下所示:

├── conf //配置文件│ └── app.conf├── controllers //控制器│ └── default.go├── main.go ├── models //模型 │ └── models.go├── routers //路由│ └──router.go├── static //静态文件│ ├── css│ ├── ico│ ├── img│ └── js└── views //界面 └── index.tpl

1、conf

beego 默认会创建配置文件目录,里面放置系统的配置文件,这里我们先创建app.conf ,增加数据库连接配置。

appname= webDemohttpport =8080runmode = devDBConn="root:root@tcp(localhost:3306)/zwz_test?charset=utf8"

2、controller

controllers目录主要是控制器相关的,我们在controllers中增加pay.go

package controllersimport ("webDemo/models")func(c*MainController)PayQuery() {AccountID,_:=c.GetInt64("AccountID1") payment,_:= models.GetPaymenRec(AccountID)c.Data["AccountID"] = payment.AccountIDc.Data["PartnerID"] = payment.PartnerIDc.Data["UserID"] = payment.UserIDc.Data["CreateTime"] = payment.CreateTimec.Data["Amount"] = payment.Amountc.Data["OuterTradeNo"] = payment.OuterTradeNoc.Data["Remark"] = payment.Remarkc.Data["Status"] = payment.Statusc.Data["Msg"] = payment.Msgc.TplName="query.html"}func(c*MainController)PayAdd() {varpayment models.PaymentRecordStrc.ParseForm(&payment) pay,_:= models.AddPaymenRec(payment)c.Data["AccountID"] = pay.AccountIDc.Data["PartnerID"] = pay.PartnerIDc.Data["UserID"] = pay.UserIDc.Data["CreateTime"] = pay.CreateTimec.Data["Amount"] = pay.Amountc.Data["OuterTradeNo"] = pay.OuterTradeNoc.Data["Remark"] = pay.Remarkc.TplName="query.html"}

3、models

models是存放实体类文件,属于模型层,负责定义实体类和数据增删改查的操作。在models目录下增加pay.go 。

packagemodelsimport ("database/sql""errors""strconv""time""github.com/astaxie/beego"_"github.com/go-sql-driver/mysql")varDb *sql.DBtype PaymentRecordstruct{ Idint64AccountIDint64PartnerIDstringUserIDstringCreateTimestringAmountfloat64OuterTradeNostringRemarkstringStatusintMsgstring}typePaymentRecordStrstruct{ AccountIDstringPartnerIDstringUserIDstringCreateTimestringAmountstringOuterTradeNostringRemarkstring}funcinit(){ dbconn := beego.AppConfig.String("DBConn") db, err := sql.Open("mysql", dbconn)iferr !=nil{return} db.SetMaxOpenConns(2000) db.SetMaxIdleConns(0) db.Ping() Db = db}funcClose(){ifDb !=nil{ Db.Close() }}funcAddPaymenRec(rec PaymentRecordStr)(PaymentRecord, error){varisql ="INSERT pay_demo SET account_id=?,partner_id=?,user_id=?,amount=?,outer_tradeno=?,remark=?"AccountID, _ := strconv.ParseInt(rec.AccountID,10,64) Amount, _ := strconv.ParseFloat(rec.Amount,64) response := PaymentRecord{0, AccountID, rec.PartnerID, rec.UserID, rec.CreateTime, Amount, rec.OuterTradeNo, rec.Remark,0,""}ifDb ==nil{returnresponse, errors.New("AddPaymenRec connect mysql failed") } stmt, _ := Db.Prepare(isql)deferstmt.Close() beego.Informational("AddPaymenRec rec=%v", rec) res, err := stmt.Exec(AccountID, rec.PartnerID, rec.UserID, Amount, rec.OuterTradeNo, rec.Remark)iferr ==nil{ response.Id, _ = res.LastInsertId() response.Status =1response.Msg ="已生效"returnresponse,nil}returnresponse,nil}funcGetPaymenRec(AccountIDint64)(PaymentRecord, error){varqsql ="SELECT * FROM pay_demo WHERE account_id=?"varresponse PaymentRecord response.Msg ="失败"ifAccountID !=0{ifDb ==nil{returnresponse, errors.New("GetPaymenRec connect mysql failed") } stmt, _ := Db.Prepare(qsql) rows, err := stmt.Query(AccountID)deferrows.Close()iferr !=nil{returnresponse, err }vartimedatestringforrows.Next() { err = rows.Scan(&response.Id, &response.AccountID, &response.PartnerID, &response.UserID, &timedate, &response.Amount, &response.OuterTradeNo, &response.Remark)iferr !=nil{returnresponse, err } DefaultTimeLoc := time.Local loginTime, err := time.ParseInLocation("2006-01-02 15:04:05", timedate, DefaultTimeLoc)iferr ==nil{ unix_time := loginTime.Unix()//time to int64 response.CreateTime = time.Unix(unix_time, 0).Format("2006-01-02 15:04:05") response.Status = 2 response.Msg = "成功" return response, err } else { return response, err } } return response, nil } return response, errors.New("GetPaymenRec Requset is non porinter")}

和实体对应的还有数据库中的表结构,这里我们手动在数据库中增加pay_demo表,实际上beego封装了orm,可自动创建对应的表。

CREATETABLE`pay_demo`(`id`int(64)NOTNULLAUTO_INCREMENT,`account_id`int(64)NOTNULL,`partner_id`varchar(50)CHARACTERSETutf8DEFAULTNULL,`user_id`varchar(50)CHARACTERSETutf8DEFAULTNULL,`create_time`datetimeDEFAULTCURRENT_TIMESTAMP,`amount`doubleDEFAULT0,`outer_tradeno`varchar(50)CHARACTERSETutf8DEFAULTNULL,`remark`varchar(255)CHARACTERSETutf8DEFAULTNULL, PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=5024DEFAULTCHARSET=utf8COLLATE=utf8_bin;

4、views

views目录负责存放前端模板文件。beego支持t4模板,功能非常强大。我们将原有的index.tpl 删除,增加新的index.html 和query.html

index.html页面:

html><html><head><title>webDemo

  非常感谢您读完蓝港网络的这篇文章:"Golang入门系列(十三)如何用Beego快速开发web应用",仅为提供更多信息供用户参考使用或为学习交流的方便。我们公司提供:网站建设、网站制作、官网建设、SEO优化、小程序制作等服务,欢迎联系我们提供您的需求。

标签:

Copyright © 常州蓝港网络科技有限公司 苏ICP备2022017479号-1