下载地址
//获取beego包
go get github.com/astaxie/beego
//下载工具包,工具包相关命令 只在%GOPATH%/src 目录下有效
go get github.com/beego/bee
基本用法
//新建web工程 bee new <项目名>
//新建api工程 bee api <项目名>
//启动工程 bee run <项目路径名>
//浏览器访问 http://127.0.0.1:8080/ 就可以看到beego的默认界面
一、参数配置
系统参数
beego默认读取项目目录下的 conf/app.conf 文件
实际使用只要配置需要的的参数,在代码中也是可以修改的。
下面列出所有的系统参数和解释
#-----------------------------app 配置-----------------------------
AppName = ApiService
#运行模式dev test prod
RunMode = dev
#路由忽略大小写匹配,默认为true
RouterCaseSensitive = true
#服务器默认在请求的时候输出 server 为 ApiService
ServerName = ApiService
#是否异常恢复,默认值为 true
RecoverPanic = true
#是否允许在 HTTP 请求时,返回原始请求体数据字节,默认为 true
CopyRequestBody = true
# 是否开启 gzip 支持,默认为 false 不支持 gzip,一旦开启了 gzip,那么在模板输出的内容会进行 gzip 或者 zlib 压缩,根据用户的 Accept-Encoding 来判断。web项目应该设置为true
#压缩级别, gzipCompressLevel = 9,取值为 1~9,默认为 1(最快压缩)
#压缩长度阈值, gzipMinLength = 256,当原始内容长度大于此阈值时才开启压缩,默认为 20B(ngnix默认长度)
#请求类型, includedMethods = get;post,针对哪些请求类型进行压缩,默认只针对 GET 请求压缩
EnableGzip = false
#文件上传默认内存缓存大小,默认值是 1 << 26(64M)
MaxMemory = 1 << 26
#是否显示系统错误信息,默认为 true。
EnableErrorsShow = true
# 是否将错误信息进行渲染,默认值为 true,
EnableErrorsRender = false
#-------------------Web配置---------------------------------
#是否模板自动渲染,默认值为 true
AutoRender = false
#是否开启文档内置功能,默认是 false,API配合swagger时,设置为true。
EnableDocs = true
# Flash数据设置时 Cookie 的名称,默认是 API_FLASH
FlashName = API_FLASH
#Flash 数据的分隔符,默认是 APIFLASH
FlashSeperator = APIFLASH
#是否开启静态目录的列表显示,默认不显示目录,返回 403 错误。配合swagger需要设置为true。
DirectoryIndex = true
#静态文件目录设置,默认是static。可配置单个或多个目录:
#单个目录, StaticDir = download. 相当于 beego.SetStaticPath("/download","download")
#多个目录, StaticDir = download:down download2:down2. 相当于 beego.SetStaticPath("/download","down") 和 beego.SetStaticPath("/download2","down2")
StaticDir = swagger
#允许哪些后缀名的静态文件进行 gzip 压缩,默认支持 .css 和 .js
StaticExtensionsToGzip = .css, .js
# 模板左标签,默认值是{{。
TemplateLeft = {{
#模板右标签,默认值是}}。
TemplateRight = }}
#模板路径,默认值是 views。
ViewsPath = views
#是否开启 XSRF,默认为 false,不开启。XSRF全称是 cross-site request forgery(跨站点请求伪造),也称为CSRF,是一种常见的web攻击方式。
EnableXSRF = false
#XSRF 的 key 信息,默认值是 beegoxsrf。 EnableXSRF=true 才有效
XSRFKEY = beegoxsrf
#XSRF 过期时间,默认值是 0,不过期。
XSRFExpire = 0
#----------------------listener配置-----------------------
#是否开启热升级,默认是 false,关闭热升级
Graceful = false
#设置 HTTP 的超时时间,默认是 0,不超时。
ServerTimeOut = 30
#监听本地网络地址类型,默认为 “tcp4”,该值可以是 “tcp”, “tcp4”, “tcp6”, “unix” or “unixpacket” 之一。
ListenTCP4 = tcp4
#是否启用 HTTP 监听,默认是 true。
EnableHTTP = true
# 应用监听地址,默认为空,监听所有的网卡 IP。
HTTPAddr =
HTTPPort = 8080
#是否启用 HTTPS,默认是 false 关闭。当需要启用时,先设置 EnableHTTPS = true,并设置 HTTPSCertFile 和 HTTPSKeyFile
EnableHTTPS = false
HTTPSAddr =
HTTPSPort = 10443
HTTPSCertFile = conf/ssl.crt
HTTPSKeyFile= conf/ssl.key
#是否开启进程内监控模块,默认 false 关闭。
EnableAdmin = true
# 监控程序监听的地址,默认值是 localhost 。
AdminAddr = localhost
#监控程序监听的地址,默认值是 8088 。
AdminPort = 8088
#是否启用 fastcgi , 默认是 false。
EnableFcgi = false
#通过fastcgi 标准I/O,启用 fastcgi 后才生效,默认 false。
EnableStdIo = false
#----------------------Session配置-------------
SessionOn = false
# session 的引擎,默认是 memory
SessionProvider =
#存在客户端的 cookie 名称,默认值是 beegosessionID。
SessionName = beegosessionID
#session 过期时间,默认值是 3600 秒。
SessionGCMaxLifetime = 3600
#配置信息,根据不同的引擎设置不同的配置信息
SessionCookieLifeTime = 3600
#是否开启SetCookie, 默认值 true 开启。
SessionAutoSetCookie = true
#session cookie 存储域名, 默认空。
SessionDomain =
关于Log配置:
- AccessLogs 是否输出日志到 Log,默认在 prod 模式下不会输出日志,默认为 false 不输出日志。此参数不支持配置文件配置。
beego.BConfig.Log.AccessLogs = false
- FileLineNum 是否在日志里面显示文件名和输出日志行号,默认 true。此参数不支持配置文件配置。
beego.BConfig.Log.FileLineNum = true
- Outputs 日志输出配置,参考 logs 模块,console file 等配置,此参数不支持配置文件配置。
beego.BConfig.Log.Outputs = map[string]string{"console": ""}
beego.BConfig.Log.Outputs["console"] = ""
其他参数
除了上面的系统参数,还可以配置其他参数,如mysql
mysqladdr = “127.0.0.1”
mysqlport = 3306
mysqluser =
mysqlpassword =
环境配置
除了上面的配置外,我们还能够将配置分开,主要是根据不同的运行模式,如下
appname = WEB
runmode = dev
[dev]
httpport = 8001
[test]
httpport = 8002
[prod]
httpport = 8003
//分开配置后,取值如下
beego.AppConfig.String("dev::mysqluser")
二、路由
直接请求式
beego.Get("/test", func(ctx *context.Context) {
ctx.WriteString("hello world")
})
结构体添加
这个结构体必须匿名继承beego.Controller
type MainController struct {
beego.Controller
}
再用Router方法添加进去。
如果后面没有第三个参数那么 默认执行这个结构的对应方法,
先执行 Prepare()方法 再执行Get() Post()等方法 最后执行Finish方法。
beego.Router("/", &controllers.MainController{},"*:function")
// * 表示 methon function 表示方法名,如下
//任何/test请求都执行 index方法
beego.Router("/test", &controllers.MainController{},"*:index")
//只有get,post请求执行index方法
beego.Router("/test", &controllers.MainController{},"get,post:index")
//get请求执行getfunc post请求执行postfunc
beego.Router("/test", &controllers.MainController{},"get:getfunc;post:postfunc")
RESTful风格路由
beego支持正则表达
正则文章参考:https://blog.csdn.net/qq_25490573/article/details/103211490
//通过param方法获取参数,如下
ctx.Input.Param(":id")
//如下 匹配/api/wd 此时 :id = wd 加?匹配/api/
beego.Router(“/api/?:id”, &controllers.RController{})
//也可以这样,id此时必须是int值
beego.Router(“/:id:int”, &controllers.RController{})
//例如对于URL”/download/file/api.xml”可以匹配成功,此时变量”:path”值为”file/api”, “:ext”值为”xml”
beego.Router(“/download/.”, &controllers.RController{})
//*全匹配方式 //例如对于URL”/download/ceshi/file/api.json”可以匹配成功,此时变量”:splat”值为”file/api.json”
beego.Router(“/download/ceshi/*“, &controllers.RController{})
//还可以 匹配固定的 cms_123.html 格式的
beego.Router(“/cms_:id([0-9]+).html”, &controllers.CmsController{})
当然,还有类似于Python框架flask的注解路由。如下:
func init() {
ns := beego.NewNamespace("/v1",
beego.NSNamespace("/object",
beego.NSInclude(
&controllers.ObjectController{},
),
),
beego.NSNamespace("/user",
beego.NSInclude(
&controllers.UserController{},
),
),
beego.NSNamespace("/student",
beego.NSInclude(
&controllers.StudentController{},
),
),
)
beego.AddNamespace(ns)
}
此时匹配如下路由
/v1/object
/v1/user
/v1/student
来源:CSDN
作者:Dual BSD/GPL
链接:https://blog.csdn.net/qq_25490573/article/details/104072210