Fork me on GitHub

beego入门

beego框架入门

安装beego和bee

必须先要安装git

1
2
3
go get github.com/astaxie/beego    // 安装beego

go get github.com/beego/bee // 安装bee工具

常用命令

bee中的常用命令,具体解释如下

  1. 命令必须在src目录下执行
    • new :创建web项目bee new webname
    • api:创建API应用bee api apiname;少了static和views目录,多了test模块,用来做单元测试
  2. 命令必须在/src/appname下执行
    • run:bee run 进入框架网页中

MB179g.png

MBWltK.png

MBWkfU.png

  1. pack

bee pack用来发布应用的时候进行打包,将项目打包成zip

  1. version

动态获取bee、beegogo的版本信息bee version

  1. generate

用来自动化的生成代码

  1. migrate

    数据库的迁移命令,用来每次应用升级,降级的SQL管理

项目构成

在建立了mygo之后,整个项目的构成如下:

  • 配置文件
  • 控制器
  • 路由配置
  • 静态文件
  • 单元测试
  • 项目入口文件

MBIvlT.png

入口文件和路由

入口文件的主要功能

  • main.go中引入了一个包
  • 自动解析conf配置文件
  • 执行用户的hookfunc
  • 是否开启 session
  • 是否编译模版

会在启动的时候根据配把 views 目录下的所有模板进行预编译,然后存在map里面

  • 是否开启文档功能
  • 是否启动管理模块

在8088端口做了一个内部监听,通过端口查询到QPS、CPU、内存等信息

  • 监听服务端口

内部调用了ListenAndServe,利用groutine的优势

运行之后监听了两个端口:

  1. 8080:对外服务
  2. 8088:实行对内监控
1
2
3
4
5
6
7
8
9
10
11
package main

// 入口文件
import (
_ "mygo/routers" // 引入了一个包
"github.com/astaxie/beego"
)

func main() {
beego.Run()
}
  • 路由配置文件中只是执行了init函数

  • 函数的功能是注册路由,映射URL 到 controller

  • 三个参数

    1. /表示URL(用户请求的地址),访问的是不带任何参数的URL地址

    2. 第二个是对应的Controller,即请求分发哪个控制器来执行相应的逻辑

      1
      beego.Router("/", &IndexController{}, "*:Index")
    3. 什么方法执行什么函数,其中*表示所有

1
2
3
4
5
6
7
8
9
10
11
package routers

// 路由
import (
"mygo/controllers"
"github.com/astaxie/beego"
)

func init() {
beego.Router("/", &controllers.MainController{})
}

配置文件信息

参数配置的文件默认在conf/app.conf

1
2
3
4
5
6
7
8
9
10
appname = WEB
runmode = dev

// 不同的环境设置不同的端口
[dev]
httpport = 8080
[test]
httpport = 8081
[prod]
httpport = 8082

路由配置

自定义方法及RESTful规则:

1
beego.Router("/", &IndexController{}, "*:Index")
  • *表示任意的method都要执行该函数
  • 不同的格式使用;来分开
  • 多个method对应同一个funcname,method之间通过,来分开
  • 使用httpmethod:funcname格式来展示

MDmZnK.png

controller逻辑

上面我们知道,路由是需要分发给各个控制器进行处理的,源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package controllers

import "github.com/astaxie/beego"

type MainController struct{ // 定义结构体
beego.Controller // 内嵌结构体,进行继承
}

// 重写Get方法:接受者
func (this *MainController) Get(){ // data是 map 类型
this.Data["website"] = "beego.me"
this.Data["Email"] = "astaxie&gmail.com"
this.TplName = "index.tpl" // 模版名称指定:index.tpl
}

// 直接输出字符
func (this *MainController) Post(){
this.Ctx.WriterString("hello golang")
}
  1. beego.Controller中拥有很多的方法:
  • Init
  • Prepare
  • Post
  • Get
  • Delete
  • Head
  1. 渲染模版

    this.TplName就是需要渲染的模板,指定了index.tpl;去模版目录的Controller/<方法名>.tpl进行查找

    1
    maincontroller/get.tpl
  2. 用户设置模版之后,系统自动调用Render函数;可以不使用模版,直接输出字符串

    1
    2
    3
    func (this *MainController) Get(){
    this.Ctx.WriteString("hello golang!")
    }

自己新建的controller

  • controller下面新建test.go

MD3CSe.png

  • 进行路由配置

MD82Eq.png

  • 页面中访问测试localhost:8080/test

MD8CNV.png


Model 逻辑

model层一般是用来做数据库操作

  • bee new中不存在model
  • bee api中存在model层的应用

如果应用足够简单,不需要model;如果模块开始多了,必须使用model

MDY6DH.png

MDYd4x.png

MDYk38.png

View 逻辑

Controller中存在this.TplName="index.tpl",设置显示的模板文件,后缀可以是tpl或者html。

本文标题:beego入门

发布时间:2019年11月17日 - 11:11

原始链接:http://www.renpeter.cn/2019/11/17/beego%E5%85%A5%E9%97%A8.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea