上一篇我们介绍了 Golang 程序优雅退出的相关细节和使用总结:https://www.cnblogs.com/zhucheer/p/12337277.html
今天我们来使用一个 Web 框架快速构建一个带优雅退出功能的 go 程序。
第一步:
在 GOPATH 目录下创建一个目录 demo(可随意),并在目录中创建一个 main.go,并写入代码:
package main
import (
"gitee.com/zhucheer/orange/app"
"fmt"
"time"
)
func main(){
router := &Route{}
app.AppStart(router)
}
type Route struct {
}
func (s *Route) ServeMux() {
app.NewRouter("").GET("/", func(ctx *app.Context) error {
// 通过该方法添加处理逻辑, 进程退出后会等待 ExitWaitFunDo 中的逻辑处理完成后再退出;
app.ExitWaitFunDo(func() {
// run something
time.Sleep(5*time.Second)
fmt.Println("Shutdown gracefully")
})
return ctx.ToString("Hello world!")
})
}
第二步:我们通过 go mod 将相关依赖进行安装;
我们首先根据自己的 go 版本配置环境变量和国内代理;
go 版本小于 1.13
window 下在 cmd 中执行: set GO111MODULE=on set GOPROXY=https://goproxy.cn linux 下执行: export GO111MODULE=on export GOPROXY=https://goproxy.cn
go 版本大于等于 1.13
go env -w GOPROXY=https://goproxy.cn,direct
然后在当前项目目录下面执行命令:
go mod init // 初始化go mod 包管理 go mod tidy // 加载依赖包 go mod vendor // 将依赖包拷贝到项目目录中去 go run main.go
不出意外,程序就启动了,如下图:
我们可以尝试访问 http://127.0.0.1:8088,我们代码中有个逻辑是等待 5s 后打印"Shutdown gracefully",可以在刷新浏览器页面后立刻 Ctrl+C 让程序退出,我们可以在控制台中清楚的看到,程序是等待打印 "Shutdown gracefully" 后再退出程序的。
利用 Orange 框架可以方便的构建一个能优雅退出的 http 服务,建议大家尝试;
其中还包含了各类封装好的 Web 开发组件,感兴趣的同学可以试试:
代码:https://gitee.com/zhucheer/orange
文档:https://www.kancloud.cn/chase688/orange_framework/1448035