Golang 入门系列(十三)如何用Beego快速开发web应用
ccwgpt 2024-10-10 04:50 42 浏览 0 评论
接着之前的内容,前面已经讲过很多Golang的基础语法,mysql的使用,redis的使用,也讲了orm框架,如何创建一个webapi 服务等等,感兴趣的可以看看以前的文章。今天要来说一说,如何用beego开发web应用。
介绍
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,同时也是一个关注度和使用量都比价高的开源项目。我认为它是go初学者比较容易上手的一门MVC Web框架。
它是由国内团队开发的开源框架,文档基本都是中文,简单易懂。
安装
需要安装 Beego 和 Bee 的开发工具:
$ go get github.com/astaxie/beego
$ go get github.com/beego/bee
注意:
- beege和bee是两个概念。beego是框架,bee是工具,是命令。
- 在安装Beego前,先确认是否将$GOPATH/bin写入GO环境中。
创建应用
创建一个名为webDemo的应用
$ bee new webDemo //创建一个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 = webDemo
httpport = 8080
runmode = dev
DBConn="root:root@tcp(localhost:3306)/zwz_test?charset=utf8"
2、controller
controllers目录主要是控制器相关的,我们在controllers中增加pay.go
package controllers
import (
"webDemo/models"
)
func (c *MainController) PayQuery() {
AccountID, _ := c.GetInt64("AccountID1")
payment, _ := models.GetPaymenRec(AccountID)
c.Data["AccountID"] = payment.AccountID
c.Data["PartnerID"] = payment.PartnerID
c.Data["UserID"] = payment.UserID
c.Data["CreateTime"] = payment.CreateTime
c.Data["Amount"] = payment.Amount
c.Data["OuterTradeNo"] = payment.OuterTradeNo
c.Data["Remark"] = payment.Remark
c.Data["Status"] = payment.Status
c.Data["Msg"] = payment.Msg
c.TplName = "query.html"
}
func (c *MainController) PayAdd() {
var payment models.PaymentRecordStr
c.ParseForm(&payment)
pay, _ := models.AddPaymenRec(payment)
c.Data["AccountID"] = pay.AccountID
c.Data["PartnerID"] = pay.PartnerID
c.Data["UserID"] = pay.UserID
c.Data["CreateTime"] = pay.CreateTime
c.Data["Amount"] = pay.Amount
c.Data["OuterTradeNo"] = pay.OuterTradeNo
c.Data["Remark"] = pay.Remark
c.TplName = "query.html"
}
3、models
models是存放实体类文件,属于模型层,负责定义实体类和数据增删改查的操作。在models目录下增加pay.go 。
package models
import (
"database/sql"
"errors"
"strconv"
"time"
"github.com/astaxie/beego"
_ "github.com/go-sql-driver/mysql"
)
var Db *sql.DB
type PaymentRecord struct {
Id int64
AccountID int64
PartnerID string
UserID string
CreateTime string
Amount float64
OuterTradeNo string
Remark string
Status int
Msg string
}
type PaymentRecordStr struct {
AccountID string
PartnerID string
UserID string
CreateTime string
Amount string
OuterTradeNo string
Remark string
}
func init() {
dbconn := beego.AppConfig.String("DBConn")
db, err := sql.Open("mysql", dbconn)
if err != nil {
return
}
db.SetMaxOpenConns(2000)
db.SetMaxIdleConns(0)
db.Ping()
Db = db
}
func Close() {
if Db != nil {
Db.Close()
}
}
func AddPaymenRec(rec PaymentRecordStr) (PaymentRecord, error) {
var isql = "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, ""}
if Db == nil {
return response, errors.New("AddPaymenRec connect mysql failed")
}
stmt, _ := Db.Prepare(isql)
defer stmt.Close()
beego.Informational("AddPaymenRec rec=%#v", rec)
res, err := stmt.Exec(AccountID, rec.PartnerID, rec.UserID, Amount, rec.OuterTradeNo, rec.Remark)
if err == nil {
response.Id, _ = res.LastInsertId()
response.Status = 1
response.Msg = "已生效"
return response, nil
}
return response, nil
}
func GetPaymenRec(AccountID int64) (PaymentRecord, error) {
var qsql = "SELECT * FROM pay_demo WHERE account_id=?"
var response PaymentRecord
response.Msg = "失败"
if AccountID != 0 {
if Db == nil {
return response, errors.New("GetPaymenRec connect mysql failed")
}
stmt, _ := Db.Prepare(qsql)
rows, err := stmt.Query(AccountID)
defer rows.Close()
if err != nil {
return response, err
}
var timedate string
for rows.Next() {
err = rows.Scan(&response.Id, &response.AccountID, &response.PartnerID, &response.UserID, &timedate, &response.Amount, &response.OuterTradeNo, &response.Remark)
if err != nil {
return response, err
}
DefaultTimeLoc := time.Local
loginTime, err := time.ParseInLocation("2006-01-02 15:04:05", timedate, DefaultTimeLoc)
if err == 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,可自动创建对应的表。
CREATE TABLE `pay_demo` (
`id` int(64) NOT NULL AUTO_INCREMENT,
`account_id` int(64) NOT NULL,
`partner_id` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
`user_id` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`amount` double DEFAULT '0',
`outer_tradeno` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
`remark` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5024 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
4、views
views目录负责存放前端模板文件。beego支持t4模板,功能非常强大。我们将原有的index.tpl 删除,增加新的index.html 和query.html
index.html页面:
<!DOCTYPE html>
<html>
<head>
<title>webDemo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div>
<form action="/query" method="Post">
<div>
GetPaymentBy AccountID:<input type="text" name="AccountID1" />
</div>
<div>
<input type= "submit" name="n" />
</div>
</form>
<br/>
<br/>
<form action="/add" method="Post">
<div>
AccountID:<input type="text" name="AccountID" />
</div>
<div>
PartnerID:<input type="text" name="PartnerID" />
</div>
<div>
UserID :<input type="text" name="UserID" />
</div>
<div>
CreateTime:<input type="text" name="CreateTime" />
</div>
<div>
Amount:<input type="text" name="Amount" />
</div>
<div>
OuterTradeNo:<input type="text" name="OuterTradeNo" />
</div>
<div>
Remark:<input type="text" name="Remark" />
</div>
<div>
<input type= "submit" name="add" value="添加"/>
</div>
</form>
</div>
</body>
</html>
query.html页面:
<!DOCTYPE html>
<html>
<head>
<title>BeegoDemo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div>
<div>
Payment:
</div>
<div>
AccountID:{{.AccountID}}
</div>
<div>
PartnerID:{{.PartnerID}}
</div>
<div>
UserID:{{.UserID}}
</div>
<div>
CreateTime:{{.CreateTime}}
</div>
<div>
Amount:{{.Amount}}
</div>
<div>
OuterTradeNo:{{.OuterTradeNo}}
</div>
<div>
Remark:{{.Remark}}
</div>
</div>
</body>
</html>
5、routers
routers定义路由,负责整个web系统的页面请求转发。同样,我们创建一个router.go文件,在router.go 中增加以上新增的2个路由
package routers
import (
"webDemo/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/query", &controllers.MainController{}, "Post:PayQuery") // 新增PayQuery路由
beego.Router("/add", &controllers.MainController{}, "Post:PayAdd") // 新增PayAdd路由
beego.Router("/", &controllers.MainController{})
}
运行
增加完以上代码之后,重新运行webDemo应用,就可以看到我们新增加的订单查询和新增订单的功能。
最后
1. 以上就把beego 的安装给介绍完了。同时也通过简单的订单支付的例子,介绍如何使用beego 开发web应用。
· 2. 这里只是对beego 做一个最基本的介绍,想要详细了解beego 的各种功能,可以去它的官网:https://beego.me
3. 分享关注(章为忠学架构)完整代码。
推荐阅读:
Golang 入门系列(十一)从零开始实现一个完整的webapi项目!
Golang 入门系列(六)理解Go协程Goroutine,这篇就够了!
Golang 入门系列(四)Golang中的interface,一看就明白
Golang 入门系列(三)打好基本功: Golang 语法基础!
相关推荐
- 谷歌正在为Play商店进行Material Design改造
-
谷歌最近一直忙于在其应用程序中完成MaterialDesign风格的改造,而Play商店似乎是接下来的一个。9to5Google网站报道,有用户在Play商店的最新版本中发现了新界面,暗示该应用和网...
- 企业网站免费搭建,定制化建站CMS系统
-
科腾软件企业网站CMS管理系统已完成开发工作,首次开源(全部源码)发布。开发工具:VisualStudioEnterprise2022数据库:SQLite(零配置,跨平台,嵌入式)开发...
- 您需要的 11 个免费 Chrome 扩展程序
-
来源:SEO_SEM营销顾问大师Chrome扩展程序是SEO的无名英雄,他们在幕后默默工作,使您的策略脱颖而出并提高您的努力效率。从竞争对手研究到审核您的网站,速度比您说“元描述”还快,这些小工具发...
- 户外便携设备抗干扰困境如何破局?CMS-160925-078S-67给出答案
-
在户外复杂的电磁环境中,便携式设备中的扬声器需具备出色抗干扰能力,CUID的CMS-160925-078S-67在这方面表现突出。 从其结构设计来看,矩形框架虽主要为适配紧凑空...
- 一个基于NetCore开发的前后端分离CMS系统
-
今天给大家推荐一个开源的前后端分离架构的CMS建站系统。项目简介这是一个基于.Net3构建的简单、跨平台、模块化建站系统。系统业务简单、代码清晰、层级分明、全新架构便于二次扩展开发。支持多种数据库,...
- 本地Docker部署ZFile网盘打造个人云存储
-
前言本文主要介绍如何在LinuxUbuntu系统使用Docker本地部署ZFile文件管理系统,并结合cpolar内网穿透工具实现远程访问本地服务器上的ZFile传输与备份文件,轻松搭建个人网盘,无...
- pcfcms企业建站系统 免费+开源的企业内容管理系统
-
项目介绍pcfcms是基于TP6.0框架为核心开发的免费+开源的企业内容管理系统,专注企业建站用户需求提供海量各行业模板,降低中小企业网站建设、网络营销成本,致力于打造用户舒适的建站体验。演示站...
- 【推荐】一个高颜值且功能强大的 Vue3 后台管理系统框架
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍SnowAdmin是一款基于Vue3、TypeScript、Vite5、Pinia、Arco-Desi...
- java开源cms管理系统框架PublicCMS后台管理系统
-
一款使用Java语言开发的CMS,提供文章发布,图片展示,文件下载,用户权限、站点模块,内容管理、分类等功能。可免费用于商业用途maven工程数据库脚本在工程中database文件夹下代码结构:效果...
- 一定要大量读书:当我问Deepseek,它给出的高效阅读方法厉害了!
-
一年一度的世界读书日,总该写点什么。于是,我去问Deepseek给我推荐人生破局必读的10本书,结果它给了我回复,竟然10本推荐的书籍里,我都曾经浏览过,同时还给出破局关键。而说浏览过,不是读过,是因...
- 《搜神札记》:不应磨灭的惊奇(小说《搜神记》)
-
□黄勃志怪传说的书写一直是文人墨客的后花园,晚近尤盛,从张岱到袁枚到纪昀,收集那些或阴森或吊诡的行状故事,遂成一类,到民国年间,周作人挟此遗传,捋袖子拿希腊神话动刀,乃兄鲁迅不甘其后,《故事新编》虎...
- 《如何构建金字塔》之第三章总结(构建金字塔结构的方法有)
-
“没有什么比一套好理论更有用了。”——库尔特.勒温这篇读后感依然引用了这句库尔特.勒温名言,这句话也是我读芭芭拉.明托这本书的初衷。今天就“如何构建金字塔”,我来谈谈我的读后心得。我热爱写作,但是写...
- 《助人技术》第一章助人引论内容框架
-
第一章内容基本呈现如何成为助人者(心理咨询师)以及一些相关基础知识,对于进入这个行业有兴趣以及希望通过心理咨询寻求帮助但存有疑虑的当事人,都值得一读。心理咨询的三个阶段(不是说严格的三个阶段,而是广义...
- AI助手重构读后感写作流程:从提纲到完整性思考的转换
-
大家好!你有没有遇到过读完一本书,想要写读后感,却不知道从何下手的情况呢?今天我们要来探讨一下如何利用稿见AI助手来重构读后感写作流程,从提纲到完整性思考的转换。让我们一起来看看这个全新而又实用的方法...
- 图解用思维导图做读书笔记技巧(图解用思维导图做读书笔记技巧视频)
-
做阅读笔记非常有利于读后进行有效的深入思考,而思维导图这一强大的工具其最大的特点就是架构清晰,在阅读过程中对文章的分析、总结、分类起着很大的辅助作用。思维导图读书笔记步骤:1、阅读大纲。首先要快速浏览...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)