完整项目地址: [go-shop-b2c](https://github.com/CleverBamboo/go-shop-b2c)
系列文章:
* [手摸手,带你用 Beego撸商城 系列一(基础篇)](https://cleverbamboo.github.io/2021/03/30/GO/手摸手,带你用Beego撸商城系列一(基础篇)/)
* [手摸手,带你用 Beego撸商城 系列二(登录篇)](https://cleverbamboo.github.io/2021/04/01/GO/手摸手,带你用Beego撸商城系列二(登录篇)/)
* [手摸手,带你用 Beego撸商城 系列三(系统配置篇)](https://cleverbamboo.github.io/2021/04/09/GO/手摸手,带你用Beego撸商城系列三(系统配置篇)/)
## 前言
这篇就来讲解,一下要启动项目的一些基础配置,比如通过 bee 工具生成 model 层,CORS配置,router配置,日志配置等
<!--more-->
## Bee 工具生成 model 层
### bee 工具简介
bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署。
### bee 工具的安装
```
go get -u github.com/beego/bee/v2
```
输入
```
bee version
```
如下图所示:
![](https://z3.ax1x.com/2021/04/26/gSoA4f.png)
**这里只能介绍 bee 根据 MySql 反向生成 api 应用**
### api 命令
```shell script
bee api [appname] [-tables=""] [-driver=mysql] [-conn="root:<password>@tcp(127.0.0.1:3306)/test"]
```
可选命令介绍
* appname,生成 api 应用的名称
* -tables,顾名思义生成的表名,""表示反射全部表,如果输入固定表名,只反射输入的表名
* -driver,数据库驱动,支持Mysql、Oracle、Mongodb等
* -conn,连接地址,root:<password>@tcp(127.0.0.1:3306)/test
输入如下命令:
```shell script
bee api appname -tables="" -driver=mysql -conn="root:123456@tcp(127.0.0.1:3306)/go-shop-b2c"
```
![](https://z3.ax1x.com/2021/04/26/gSbFsg.png)
目录结构如下:
![](https://z3.ax1x.com/2021/04/26/gSb2fP.png)
### 项目和SQL文件
* [点击跳转](https://github.com/CleverBamboo/appname)
## 项目路由设置
前面我们已经创建了 beego 项目,而且我们也看到它已经运行起来了,那么是如何运行起来的呢?让我们从入口文件先分析起来吧:
```go
package main
import (
_ "quickstart/routers"
"github.com/beego/beego/v2/server/web"
)
func main() {
web.Run()
}
```
我们看到 main 函数是入口函数,但是我们知道 Go 的执行过程是如下图所示的方式:
![](https://z3.ax1x.com/2021/04/26/gSXgHg.png)
这里我们就看到了我们引入了一个包 _ "quickstart/routers",这个包只引入执行了里面的 init 函数,那么让我们看看这个里面做了什么事情:
```go
package routers
import (
"appname/controllers"
beego "github.com/beego/beego/v2/server/web"
)
func init() {
ns := beego.NewNamespace("/v1",
beego.NSNamespace("/ad",
beego.NSInclude(
&controllers.AdController{},
),
),
)
beego.AddNamespace(ns)
}
```
## CORS 配置
api 项目通常都需要进行跨域配置,因为要方便前端本地调试,配置如下:
```go
func corsInit() {
beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
// 可选参数"GET", "POST", "PUT", "DELETE", "OPTIONS" (*为所有)
// 其中Options跨域复杂请求预检
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
// 指的是允许的Header的种类
AllowHeaders: []string{"Origin", "Authorization", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
// 公开的HTTP标头列表
ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
// 如果设置,则允许共享身份验证凭据,例如cookie
AllowCredentials: true,
// 指定可访问域名AllowOrigins
AllowOrigins: []string{"*"},
}))
}
```
## 日志配置
```go
_ = logs.SetLogger("console")
logs.EnableFuncCallDepth(true)
```
有疑问加站长微信联系(非本文作者)