golang中web框架-beego创建项目

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

运行新建项目

现在使用bee命令来运行一下案例,看一下效果。在开发工具下方的terminal中,打开terminal,输入命令:

bee run
复制代码

项目运行效果

image-20211009164338670

可以看到输出日志说,http服务已经在http://localhost:8080端口运行,现在我们去浏览器中验证一下,效果如下: img

beego程序流程分析

这里给大家一张程序执行流程图: Go

根据上图,可以得知程序首先到routers包下执行init方法。到router.go里面看一下具体的代码: routergo

可以看到在router.go文件中有一个init方法,看到beego.Router()这句代码。

控制器处理

router表示的是路由的意思,这个函数的功能是映射 URL 到 controller,第一个参数是 URL (用户请求的地址),这里注册的是 /,也就是访问的不带任何参数的 URL,第二个参数是对应的 Controller,即将把请求分发到那个控制器来执行相应的逻辑,现在去这里设置的MainController中去看一下有什么方法:

img

MainController结构体及函数声明在default.go文件中。而这里就看到一个Get方法,方法中有三行代码。

上文在浏览器中访问的是:http://localhost:8080,这是一个get请求,请求到了后台以后,什么请求参数都没有,因此,就会被“/”拦截,执行到MainController中的代码,因为是get请求,所以这里自动找到Get函数并进行执行。

在get函数里面,有三句代码,前两句c.Data[]= ""表示设置返回的数据字段及内容,最后一句c.TplName表示设置处理该请求指向某个模板文件,这里指向了index.tpl,那么index.tpl文件在哪里呢?可以查看项目目录结构,在views下面,views下面存放一些模板文件。

init方法分析完毕后,程序会继续往下执行,就到了main函数,在main函数中执行:beego.Run()代码。分析一下Run代码的逻辑,在Run方法内部,主要做了几件事:

  • 解析配置文件,也就是我们的app.conf文件,比如端口,应用名称等信息。
  • 检查是否开启session,如果开启session,就会初始化一个session对象。
  • 是否编译模板,beego框架会在项目启动的时候根据配置把views目录下的所有模板进行预编译,然后存放在map中,这样可以有效的提高模板运行的效率,不需要进行多次编译。
  • 监听服务端口。根据app.conf文件中的端口配置,启动监听。
框架结构解析
  1. 项目配置:conf

项目配置文件所在的目录,项目中有一些全局的配置都可以放在此目录下。默认的app.conf文件中默认指定了三个配置:

  • appname = BeegoDemo2:指定项目名称
  • httpport = 8080:指定项目服务监听端口
  • runmode = dev: 指定执行模式
  1. 控制器:controllers

该目录是存放控制器文件的目录,所谓控制器就是控制应用调用哪些业务逻辑,由controllers处理完http请求以后,并负责返回给前端调用者。

  1. 数据层:models

models层可以解释为实体层或者数据层,在models层中实现和用户和业务数据的处理,主要和数据库表相关的一些操作会在这一目录中实现,然后将执行后的结果数据返回给controller层。比如向数据库中插入新数据,删除数据库表数据,修改某一条数据,从数据库中查询业务数据等都是在models层实现。

  1. 路由层:routers:

该层是路由层。所谓路由就是分发的意思,当前端浏览器进行一个http请求达到后台web项目时,必须要让程序能够根据浏览器的请求url进行不同的业务处理,从接收到前端请求到判断执行具体的业务逻辑的过程的工作,就由routers来实现。

  1. 静态资源目录:static

在static目录下,存放的是web项目的静态资源文件,主要有:css文件,img,js,html这几类文件。html中会存放应用的静态页面文件。

  1. 视图模板:views

views中存放的就是应用中存放html模版页面的目录。所谓模版,就是页面框架和布局是已经使用html写好了的,只需要在进行访问和展示时,将获取到的数据动态填充到页面中,能够提高渲染效率。因此,模版文件是非常常见的一种方式。

综上,这个整个的项目架构就是MVC的运行模式。常见的架构模式大家应该熟悉比如:MVC,MVP,MVVM等架构。这里我们采用MVC,比较清晰易懂。

猜你喜欢

转载自juejin.im/post/7016984456560902180