/beego-induction

beego 初学入门 小宋专享版

Primary LanguageSmarty

本人也是初学go语言,作为一个后端工程师,Beego作为公司go项目主要使用的后端框架,肯定也需要进行一番研究。

与python的Django和Flask一致,Beego采用了非常经典的传统MVC架构设计模式,即

   【用户请求】->【c层控制器截获,并分析需求】->【去M层获取数据】->【返回c层】->【去V层渲染视图】->【返回c层】->【返回给用户视图】

如图所示:

1564213263981



Go配置🕐

Go的安装🍕

win下:Golang官网 ,可能需要翻墙。

然后狂点下一步就ok了,默认安在c盘根目录

Go编译器推荐🍔

推荐使用jetbrains家的Goland,下载地址

三种环境变量的配置🍟

可以通过go env来查看go环境

set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\hexu0\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=E:\workspace\kbqa\go-path
set GOPROXY=
set GORACE=
set GOROOT=C:\Go
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config

其中GOROOT、GOPATH、GOBIN这三种变量需要初学者手动配置。

$GOROOT

go的安装路径 当你安装好go之后其实这个就已经有了

$path

go安装目录下的bin文件夹配置在path中

$GOPATH

GOPATH:也就是项目所在目录。允许多个目录,当有多个目录时,请注意分隔符(win下为;GOPATH目录约定有三个子目录:

projectpath(GOPATH)
  |-- bin // golang编译可执行文件存放路径
  |-- pkg // golang编译包时,生成的.a文件存放路径
  └-- src // 源码路径,这里是存放所有go项目代码的地方。按照golang默认约定,go run,go install等命令的当前工作路径(即在 此路径下执行上述命令)。


Beego框架安装🕑

以项目中example为例,新建example目录,将此目录配置到GOPATH环境变量下

GOPATH=E:\workspace\beego-induction\example\;

进入项目目录🌭

cd E:\workspace\beego-induction\example\

框架源码下载🥓

其中-u是检查版本并下载,-v是显示下载过程。

执行指令go get -u -v github.com/astaxie/beego

框架工具包下载🍿

执行指令go get -u -v github.com/beego/bee

然后你就会发现在example目录下自动生成了binpkgsrc三个文件夹,这就说明beego安装成功,如果没有生成,检查一下是不是GOPATH没有将该项目放在第一位。



新建Beego项目🕒

创建🥚

执行指令 bee new 项目名称 例如:bee new mybeego 这条指令会在GOPATH路径下的src文件夹中创建go环境的初始配置。这里说明下虽然这条指令在根目录下执行指令也没啥问题,beego会自动寻找GOPATH去创建工程项目。但是我们最好在终端中先进入GOPATH再创建,这是考虑到可能会路径出错之类的问题

看到上面的输出后,表示项目创建完成,然后你就可以在src文件夹下看到你的项目目录了。

运行🥞

进入项目目录,也就是刚才创建的src下的mybeego文件夹下,文件夹下应有个名为main.go的文件,这就是beego的启动文件,当前目录执行指令bee run。此时终端会打印日志并提示服务器已经开启。

1564200542750

然后在浏览器中输入127.0.0.1:8080你就能看到beego的欢迎页了

1564200626287

项目目录🍳

观察mybeego项目下生成的文件,这些文件是在执行bee run时生成的,每个文件作用如下:

conf           文件夹中放的是项目的配置文件
controllers    文件夹存放主要的业务逻辑模块
modules        文件夹存放主要的数据库业务模块
routers        路由文件夹存放【不同的请求,查找不同的内容】
static         文件夹存放静态资源,例如css,js,img等(通常不和数据库打交道的部分)
tests          文件夹存放测试文件,开发一般不动这个
view           文件夹存放视图显示html文件
mybeego.exe    这是bee run编译出来的.a文件
main.go        程序主入口文件


Beego hello world🕓

新建hello world项目🍞

回到example文件,再次使用bee new hello_world命令创建hello world项目

这时在src文件夹下就有mybeegohello_world两个项目了

projectpath(GOPATH)
  |-- bin 
  |-- pkg
  └-- src
  		|-- github.com  # 安装beego时生成
  		|-- hello_world
  		└-- mybeego

前端页面编写与配置🥐

随便写个首页,命名 hello world.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        html, body {
            height: 100%;
        }
        body {
            display: flex;
            justify-content: center;
            align-items: center;
        }
    </style>
</head>
<body>
<h1 style="color: deeppink">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HELLO WORLD <br> 小宋专享版beego教程</h1>
</body>
</html>

将此静态文件放在hello_world项目文件下的view目录下,你会在该目录下看到一个名为index.tpl的文件,这就是刚才启动项目时显示的页面。是beego支持的另一种格式的html,可以不使用。

配置

  1. 新增controller文件

    在beego中,出于代码规范,对不同的url进行的post和get需要独立到单个文件,参照default.go我们来写个hwcontroller.go。

    package controllers
    
    import "github.com/astaxie/beego"
    
    type HWController struct {     
    	beego.Controller
    }
    
    func (hw *HWController) Get() {      // get请求
    	hw.TplName = "hello world.html"  // 关联到刚创建的静态文件
    }
    
  2. 增加HWController的路由

    通过controller文件,我们将逻辑与页面进行了关联,接下来就是需要让路由指向HWController

    routers文件夹下的router.go文件就是用来进行路由关联的,添加新路由:

    func init() {
        beego.Router("/", &controllers.MainController{})
        beego.Router("/hello_world", &controllers.HWController{})  // 新路由
    }
    

启动项目🥐

通过bee run命令启动后,访问http://127.0.0.1:8080,依然是beego的欢迎页,接下来访问http://127.0.0.1:8080/hello_world,我们写的Hello world页面就出现啦

1564216506355

前后端分离(json处理)🕔

对于大多是项目,都是采用的前后端分离的方法,前端通过ajax发送各种请求,而后端只需要返回给前端json就可以了。json一般采用如下格式{'code':'','msg':'','date':''}

那beego如何返回json呢?

首先前后端分离,那就不需要在管我们的数据传输给那个前端,安心做个api就可以,所以首先需要在 conf文件夹下的app.conf中关闭模板渲染

autorender = false


定义json🥨

hwcontroller.go文件中定义json的字段和类型

type JSONStruct struct {
	Code int
	Msg  string
	Data string
}

添加json值🥖

//  不再需要前端页面,所以注释掉
//func (hw *HWController) Get() {      // get请求
//	hw.TplName = "hello world.html"  // 关联静态文件
//}


func (hw *HWController) Get() {      // get请求
	json := &JSONStruct{0, "Success", "hello json"}  #添加json数据
	hw.Data["json"] = json 
	hw.ServeJSON() 
	return
}

启动服务🧀

然后启动服务访问http://127.0.0.1:8080/hello_world,这下就返回json数据了~

1564220403819

还有一种方法,当json数据很少的时候,可以直接生成json而不用定义json type

func (c *LoginController) Get() {
       c.Data["json"] = map[string]interface{}{"code":"0","msg":"Success"}
       c.ServeJSON()
       c.StopRun()
       return
}