三个工具介绍
go fmt是用来规范go文件格式,比如格式化单个文件 go fmt xxx.go
goimports 用来检查导入包,导入依赖包,删除不依赖的包
gometalinter 集成go语言几乎所有检测工具,静态分析代码,包含功能如下
go vet -工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前return的逻辑,struct的tag是否符合标准等。
go tool vet --shadow -用来检查作用域里面设置的局部变量名和全局变量名设置一样导致全局变量设置无效的问题
gotype -类型检测用来检测传递过来的变量和预期变量类型一致
gotype -x
目的
不关闭现在的链接
启用新的代码并处理新的请求
中间不能出现拒绝服务
流程
替换可执行程序
发送 SIGUSR2 信号
停止老进程继续接受新请求,并在处理完已有请求后停止
启动新的进程并接受新请求
实现
我根据上面要求写了一个简单的库gracefulServer,可以参考下
比如以gin为例使用该库实现优雅重启,代码如下:
package main
import (
"github.com/gin-gonic/gin"
"time"
"net/http"
"github.com/yushuailiu/gracefulServer"
)
func
package main
import (
"sync"
"fmt"
"time"
)
func main() {
var wg sync.WaitGroup
ch := make(chan int)
goroutineNum := 2
for i := 0; i < goroutineNum; i ++ {
wg.Add(1)
go doSomeThing(i, ch, &wg)
}
for j := 0; j < goroutineNum; j ++
awesome-go
这里记录下我是用到或则感觉比较好的 golang 库
mine projects
ssh-auto——管理ssh登陆信息
easygin——基于gin的web开发库
gracefulServer——web server优雅重启的库
gorename——一行命令重命名包名
Web Framewoks
gin——性能极好的web server frameworks
Console
fatih/color——命令行输出颜色库
Database
gorm——一个蜂场友好的ORM库,支持MySQL PostgreSQL splite3 SQL server等
go-