Beego笔记

 以下beego3基于go v1.8+,bee v2.0+,开发工具是goland2022.1

一、Beego安装

1、安装beego和bee

1)下载beego和bee 安装包:

go get github.com/beego/beego(依赖go.mod文件1),可能会在goland里面无法使用。

注意:

go get只能下载普通的包,如果下载安装程序需要用go install

  安装完之后,bee 可执行文件默认存放在 $GOPATH/bin 里面,所以您需要把 $GOPATH/bin 添加到您的环境变量中,才可以进行下一步。如果你本机设置了 GOBIN,那么上面的bee命令就会安装到 GOBIN 目录下。

注意

如果没有bee命令4

可以进行进入下载的bee工具源码目录(如:D:\GOPATH\pkg\mod\github.com\beego\bee\v2@v2.0.2):

执行 go build 会生成bee.exe文件,然后将bee.exe拷贝被go的安装目录的bin下。

2)使用goland开发工具:

可以通过以下方法来配置在goland里面使用2

  • 通过goland开发工具打开创建的项目,基于modules管理项目依赖     配置GOPROXY=https://goproxy.cn,direct

  • 执行go mod init projectname生成依赖管理文件go.mod(如果已存在,则省略)(beego 项目创建之后,我们还需要初始化go.mod文件。进入目录之后,使用go mod init初始化模块依赖。
  • 执行go mod vendor将依赖包生成到本地

2、bee工具命令

1)bee new

new 命令是新建一个 Web 项目,我们在命令行下执行 bee new <项目名> 就可以创建一个新的项目。但是注意该命令必须在 $GOPATH/src 下执行。在%GOPATH%/src目录下创建一个测试项目,并启动,浏览器输入http://localhost:8080/就可以创建的项目信息

 

2)bee generate5

  这个命令是用来自动化的生成代码的,包含了从数据库一键生成 model,还包含了 scaffold 的,通过这个命令(有多种形式):

bee generate scaffold [scaffoldname] [-fields=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]

或者bee generate appcode [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-level=3]让大家开发代码不再慢。

3)bee api

  上面的 new 命令是用来新建 Web 项目,不过很多用户使用 beego 来开发 API 应用。所以这个 api 命令就是用来创建 API 应用的。

我们可以看到和 Web 项目相比,少了 static 和 views 目录,多了一个 test 模块,用来做单元测试的。

同时,该命令还支持一些自定义参数自动连接数据库创建相关 model 和 controller: bee api [appname] [-tables=""] [-driver=mysql] [-conn="root:<password>@tcp(127.0.0.1:3306)/test"] 如果 conn 参数为空则创建一个示例项目,否则将基于链接信息链接数据库创建项目。

4)bee run

  我们在开发 Go 项目的时候最大的问题是经常需要自己手动去编译再运行,bee run 命令是监控 beego 的项目,通过 fsnotify监控文件系统。但是注意该命令必须在 $GOPATH/src/appname 下执行。 

5)bee pack

 pack 目录用来发布应用的时候打包,会把项目打包成 zip 包,这样我们部署的时候直接把打包之后的项目上传,解压就可以部署了。

6)bee migrate

 这个命令是应用的数据库迁移命令,主要是用来每次应用升级,降级的SQL管理。如:bee migrate [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]

二、Beego的MVC架构-Controller

C:Controller,体现为各种功能具有以下特性:

(1)路由功能(2)控制器函数(3)CSRF(Cross-Site request forgery)过滤器(4)Session(5)错误处理&日志功能

1、参数配置

todo

2、路由设置

1)基础路由

   从 beego 1.2 版本开始支持了基本的 RESTful 函数式路由,应用中的大多数路由都会定义在 routers/router.go 文件中。最简单的 beego 路由由 URI 和闭包函数组成。

(1)基本 GET 路由

(2)基本 POST 路由

(3)注册一个可以响应任何 HTTP 的路由

2)Beego的RESTFUL路由

  在介绍这三种 beego 的路由实现之前先介绍 RESTful,我们知道 RESTful 是一种目前 API 开发中广泛采用的形式,beego 默认就是支持这样的请求方法,也就是用户 Get 请求就执行 Get 方法,Post 请求就执行 Post 方法。因此默认的路由是这样 RESTful 的请求方式。

3)Beego的正则路由

  为了用户更加方便的路由设置,beego 参考了 sinatra 的路由实现,支持多种方式的路由:

4)固定路由

  固定路由也就是全匹配的路由,如下所示:

  如上所示的路由就是我们最常用的路由方式,一个固定的路由,一个控制器,然后根据用户请求方法不同请求控制器中对应的方法,典型的 RESTful 方式。

5)自定义方法及 RESTful 规则

(1)基本介绍

  上面列举的是默认的请求方法名(请求的 method 和函数名一致,例如 GET 请求执行 Get 函数,POST 请求执行 Post 函数),如果用户期望自定义函数名,那么可以使用如下方式:

 使用第三个参数,第三个参数就是用来设置对应 method 到函数名,定义如下:

  • *表示任意的 method 都执行该函数
  • 使用 httpmethod:funcname 格式来展示
  • 多个不同的 method 对应不同的函数使用 ; 分割
  • 多个 method 对应同一个 funcname,method 之间通过 , 来分割

(2)可用的 HTTP Method:

  • *: 包含以下所有的函数
  • get: GET 请求
  • post: POST 请求
  • put: PUT 请求
  • delete: DELETE 请求
  • patch: PATCH 请求
  • options: OPTIONS 请求
  • head: HEAD 请求

如果同时存在 * 和对应的 HTTP Method,那么优先执行 HTTP Method 的方法,例如同时注册了如下所示的路由:

那么执行 POST 请求的时候,执行 PostFunc 而不执行 AllFunc

 注意:

自定义函数的路由默认不支持 RESTful 的方法,也就是如果你设置了 web.Router("/api",&RestController{},"post:ApiFunc") 这样的路由,如果请求的方法是 POST,那么不会默认去执行 Post 函数。

6)注解路由

  从2.0开始,我们使用配置CommentRouterPath来配置注解路由的扫描路径。在dev环境下,我们将自动扫描该配置指向的目录及其子目录,生成路由文件。

生成之后,用户需要显示 Include 相应地 controller。注意, controller 的 method 方法上面须有 router 注释(// @router),详细的使用请看下面的例子:

  可以在 router.go 中通过如下方式注册路由:

  web 自动会进行源码分析,注意只会在 dev 模式下进行生成,生成的路由放在 “/routers/commentsRouter.go” 文件中。

  这样上面的路由就支持了如下的路由:

  • GET /staticblock/:key
  • GET /all/:key

  其实效果和自己通过 Router 函数注册是一样的:

  同时大家注意到新版本里面增加了 URLMapping 这个函数,这是新增加的函数,用户如果没有进行注册,那么就会通过反射来执行对应的函数,如果注册了就会通过 interface 来进行执行函数,性能上面会提升很多。

3、控制器参数

  基于 beego 的 Controller 设计,只需要匿名组合 beego.Controller 就可以了,如下所示:

1)控制器方法

  web.Controller 实现了接口 web.ControllerInterfaceweb.ControllerInterface 定义了如下函数(未全部列出):
  • Init(ctx *context.Context, controllerName, actionName string, app interface{})

    这个函数主要初始化了 Context、相应的 Controller 名称,模板名,初始化模板参数的容器 Data,app 即为当前执行的 Controller 的 reflecttype,这个 app 可以用来执行子类的方法。

  • Prepare()

    这个函数主要是为了用户扩展用的,这个函数会在下面定义的这些 Method 方法之前执行,用户可以重写这个函数实现类似用户验证之类。

  • Get()

    如果用户请求的 HTTP Method 是 GET,那么就执行该函数,默认是 405,用户继承的子 struct 中可以实现了该方法以处理 Get 请求。

  • Post()

    如果用户请求的 HTTP Method 是 POST,那么就执行该函数,默认是 405,用户继承的子 struct 中可以实现了该方法以处理 Post 请求。

  • Delete()

    如果用户请求的 HTTP Method 是 DELETE,那么就执行该函数,默认是 405,用户继承的子 struct 中可以实现了该方法以处理 Delete 请求。

  • Put()

    如果用户请求的 HTTP Method 是 PUT,那么就执行该函数,默认是 405,用户继承的子 struct 中可以实现了该方法以处理 Put 请求.

2)子类扩展

  通过子 struct 的方法重写,用户就可以实现自己的逻辑,接下来我们看一个实际的例子:

3)提前终止运行

  我们应用中经常会遇到这样的情况,在 Prepare 阶段进行判断,如果用户认证不通过,就输出一段信息,然后直接中止进程,之后的 Post、Get 之类的不再执行,那么如何终止呢?可以使用 StopRun 来终止执行逻辑,可以在任意的地方执行。

  注意:

  调用 StopRun 之后,如果你还定义了 Finish 函数就不会再执行,如果需要释放资源,那么请自己在调用 StopRun 之前手工调用 Finish 函数。

三、Beego的MVC架构-Model

M:Model,即Beego ORM,对象关系映射,以及对象的持久化

(1)特性:支持Go的所有类型存储;更简单的CRUD的风格;完整实现健壮稳定的ORM。(2)支持的数据库:MySQL、PostgreSQL,Sqlite3

1、概述

1)安装ORM

2)已支持数据库驱动

3)快速入门

2、ORM使用方法

1)models.go

todo 

2)main.go

todo 

3)todo

todo 

3、数据库的设置

1)todo

todo 

2)todo

todo 

3)todo

todo 

4、注册模型

1)todo

todo 

2)todo

todo 

3)todo

todo 

5、ORM接口使用

1)todo

todo 

2)todo

todo 

3)todo

todo 

四、Beego的MVC架构-View

V:View,体现为模板,Beego通过处理模板和渲染模板展现视图。

(1)静态文件处理(2)模板处理(3)模板分页处理

五、beego 的模块设计

 
 
 
 参考:
posted @   权杖攻城狮  阅读(576)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示

目录导航