beego 是一个用于Go编程语言的开源、高性能的 web 框架
beego 被用于在Go语言中企业应用程序的快速开发,包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado, Sinatra 和 Flask
beego 官网:http://beego.gocn.vip/
上面的 beego 官网如果访问不到,看这篇文章《beego 官网文档本地环境搭建》
注意:本文的 beego 文档使用的就是本地环境搭建的文档,因为官网文档已经不可用了
beego 官方 github 仓库:https://github.com/beego/beego
上一讲,讲了 beego 的项目创建,需要的朋友可以查看《beego 使用教程 1:项目创建》
这一讲,主要讲解beego 的配置、Admin管理后台和定时任务
目录
1、beego 配置模块
Beego 默认会解析当前应用下的 conf/app.conf 文件
这里笔者使用手动创建 beego 项目的方式创建的项目
项目代码是上一讲手动方式创建的项目

在项目根目录下新建文件目录 conf
并在 conf 目录下新建文件 app.conf

下面为方便操作,笔者使用 GoLand 编辑器操作项目
使用 GoLand 打开项目根目录

app.conf 中有一些默认配置,如 httpport 可以修改项目端口号,项目端口号默认是8080
如下代码将项目端口号修改为 9090
httpport=9090

使用 GoLand 启动项目
可以在 main.go 上直接右键,选择 run 'go build main.go'

这种方式编译后的 exe文件会在默认的临时目录里
为方便看见,笔者修改编译后的exe文件到项目根目录,当然你可以不用修改,因为默认的临时目录在C盘,所以笔者想要修改它,这个修改只要修改一次就行,后面都会使用修改后的
还是在 main.go 上直接右键,选择 Modify Run Configuration...

修改 Output directory

选择项目根目录

点击 OK
然后在 main.go 上直接右键,选择 run 'go build main.go'

项目监听端口修改为9090
获取自定义配置
在app.conf 中添加自定义配置 workername=ShakeSpeare
httpport=9090
workername=ShakeSpeare

在 main.go 中添加获取自定义配置代码
package main
import (
"fmt"
"github.com/beego/beego/v2/core/config"
"github.com/beego/beego/v2/server/web"
)
func main() {
//通过config获取自定义配置
workername, _ := config.String("workername")
fmt.Println(workername)
web.Run()
}
运行项目

成功获取自定义配置
更多配置相关内容,可以查看 beego 文档
2、Admin 管理后台
默认 Admin 是关闭的,可以通过配置开启监控
在 main.go 中添加下面配置,开启 Admin
addr 和 port 可自定义
web.BConfig.Listen.EnableAdmin = true
web.BConfig.Listen.AdminAddr = "localhost"
web.BConfig.Listen.AdminPort = 8088
main.go
package main
import (
"fmt"
"github.com/beego/beego/v2/core/config"
"github.com/beego/beego/v2/server/web"
)
func main() {
//通过config获取自定义配置
workername, _ := config.String("workername")
fmt.Println(workername)
//开启 Admin 管理后台
web.BConfig.Listen.EnableAdmin = true
web.BConfig.Listen.AdminAddr = "localhost"
web.BConfig.Listen.AdminPort = 8088
web.Run()
}
运行项目后,通过浏览器访问 http://localhost:8088/
可以看到监控页面

3、定时任务
3.1、开始任务
在项目根目录下新建 job 目录,然后在 job 目录下新建 demo.go
在 demo.go 中添加下面代码
package job
import (
ctx "context"
"fmt"
"github.com/beego/beego/v2/task"
"time"
)
func DemoTask() {
//每隔4秒钟执行一次
tk := task.NewTask("DemoTask1", "0/4 * * * * *", func(ctx ctx.Context) error {
fmt.Println()
str := fmt.Sprintf("%s%s", time.Now().Format("2006-01-02 15:04:05"), " tk1 运行")
fmt.Println(str)
return nil
})
task.AddTask("DemoTask1", tk)
task.StartTask()
}
定时任务,使用 Cron表达式,每4秒钟执行一次
然后再 main.go 中添加下面代码
package main
import (
"beego-demo/job"
"fmt"
"github.com/beego/beego/v2/core/config"
"github.com/beego/beego/v2/server/web"
)
func main() {
//通过config获取自定义配置
workername, _ := config.String("workername")
fmt.Println(workername)
//执行定时任务
job.DemoTask()
//开启 Admin 管理后台
web.BConfig.Listen.EnableAdmin = true
web.BConfig.Listen.AdminAddr = "localhost"
web.BConfig.Listen.AdminPort = 8088
web.Run()
}
运行效果

3.2、多任务
main.go 中代码不变
在 job 目录下的 demo.go 中添加下面代码
package job
import (
ctx "context"
"fmt"
"github.com/beego/beego/v2/task"
"time"
)
func DemoTask() {
//每隔4秒钟执行一次
tk := task.NewTask("DemoTask1", "0/4 * * * * *", func(ctx ctx.Context) error {
fmt.Println()
str := fmt.Sprintf("%s%s", time.Now().Format("2006-01-02 15:04:05"), " tk1 运行")
fmt.Println(str)
return nil
})
task.AddTask("DemoTask1", tk)
//每隔3秒钟执行一次
tk2 := task.NewTask("DemoTask2", "0/3 * * * * *", func(ctx ctx.Context) error {
fmt.Println()
str := fmt.Sprintf("%s%s", time.Now().Format("2006-01-02 15:04:05"), " tk2 运行")
fmt.Println(str)
return nil
})
task.AddTask("DemoTask2", tk2)
task.StartTask()
}
重新运行项目

通过 Beego Admin 查看定时任务

3.3、停止任务
调用 task.StopTask() 方法会停止任务,停止的是全部任务
修改 job 目录下的 demo.go 代码如下
package job
import (
ctx "context"
"fmt"
"github.com/beego/beego/v2/task"
"time"
)
func DemoTask() {
//每隔4秒钟执行一次
tk := task.NewTask("DemoTask1", "0/4 * * * * *", func(ctx ctx.Context) error {
fmt.Println()
str := fmt.Sprintf("%s%s", time.Now().Format("2006-01-02 15:04:05"), " tk1 运行")
fmt.Println(str)
return nil
})
task.AddTask("DemoTask1", tk)
//每隔3秒钟执行一次
tk2 := task.NewTask("DemoTask2", "0/3 * * * * *", func(ctx ctx.Context) error {
fmt.Println()
str := fmt.Sprintf("%s%s", time.Now().Format("2006-01-02 15:04:05"), " tk2 运行")
fmt.Println(str)
return nil
})
task.AddTask("DemoTask2", tk2)
task.StartTask()
//睡眠20秒钟后执行
time.Sleep(time.Second * 20)
fmt.Println(time.Now().String() + " 停止任务")
//StopTask 方法会停止全部任务
task.StopTask()
}
开始2个定时任务,20秒钟后,停止定时任务
为防止 time.Sleep(time.Second * 20) 阻塞主线程,我们将 main.go 修改为下面代码
package main
import (
"beego-demo/job"
"fmt"
"github.com/beego/beego/v2/core/config"
"github.com/beego/beego/v2/server/web"
)
func main() {
//通过config获取自定义配置
workername, _ := config.String("workername")
fmt.Println(workername)
//执行定时任务
go job.DemoTask()
//开启 Admin 管理后台
web.BConfig.Listen.EnableAdmin = true
web.BConfig.Listen.AdminAddr = "localhost"
web.BConfig.Listen.AdminPort = 8088
web.Run()
}
运行效果

3.4、删除任务
task.DeleteTask 方法通过任务名称删除任务
main.go 中代码不变
在 job 目录下的 demo.go 修改为下面代码
package job
import (
ctx "context"
"fmt"
"github.com/beego/beego/v2/task"
"time"
)
func DemoTask() {
//每隔4秒钟执行一次
tk := task.NewTask("DemoTask1", "0/4 * * * * *", func(ctx ctx.Context) error {
fmt.Println()
str := fmt.Sprintf("%s%s", time.Now().Format("2006-01-02 15:04:05"), " tk1 运行")
fmt.Println(str)
return nil
})
task.AddTask("DemoTask1", tk)
//每隔3秒钟执行一次
tk2 := task.NewTask("DemoTask2", "0/3 * * * * *", func(ctx ctx.Context) error {
fmt.Println()
str := fmt.Sprintf("%s%s", time.Now().Format("2006-01-02 15:04:05"), " tk2 运行")
fmt.Println(str)
return nil
})
task.AddTask("DemoTask2", tk2)
task.StartTask()
//睡眠20秒钟后执行
time.Sleep(time.Second * 20)
fmt.Println(time.Now().String() + " 删除任务 DemoTask2")
//DeleteTask 方法通过任务名称删除任务
task.DeleteTask("DemoTask2")
}
项目启动 20秒钟后删除定时任务 DemoTask2
运行效果

至此完
本文详细介绍了如何使用Beego框架进行配置管理,包括修改端口号、读取自定义配置;同时,展示了如何搭建Admin管理后台并启用监控;接着,通过实例讲解了如何设置和管理定时任务,包括开始、停止、删除任务的操作。Beego是一个用于Go编程的高性能Web框架,适用于RESTful API、web应用和后端服务开发。

被折叠的 条评论
为什么被折叠?



