-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathmain.go
More file actions
99 lines (83 loc) · 2.52 KB
/
main.go
File metadata and controls
99 lines (83 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package main
// 导包
import (
"log"
"os"
"os/signal"
"syscall"
)
// 初始化函数
func init() {
// --- 设置日志初始化参数 开启文件名和行号显示 ---
// 使用 | (位或运算符) 来组合多个标志
// log.LstdFlags 包含了日期和时间 (log.Ldate | log.Ltime)
// log.Lshortfile 简要文件路径,log.Llongfile 完整文件路径
log.SetFlags(log.Lshortfile | log.LstdFlags)
// github.com/sirupsen/logrus
// 报告调用者的信息
//log.SetReportCaller(true)
// 自定义格式化器
/*log.SetFormatter(&log.TextFormatter{
FullTimestamp: true,
// 让文件和行号信息更突出
CallerPrettyfier: func(f *log.Frame) (string, string) {
return "",
// f.Function, // 这里可以返回函数名
// 格式化为 file:line
fmt.Sprintf(" <%s:%d>", f.File, f.Line)
},
})*/
// 设置项目为发布环境
//gin.SetMode(gin.ReleaseMode)
}
// 运行主体函数
func main() {
go run()
// 通过WaitGroup管理两个协程,主协程等待两个子协程退出
/*noChan := make(chan int)
waiter := &sync.WaitGroup{}
waiter.Add(2) // WaitGroup 计数器+2
go func(ch chan int, wt *sync.WaitGroup) {
data := <-ch
log.Println("receive data ", data)
wt.Done() // goroutine 结束时,计数器-1
}(noChan, waiter)
go func(ch chan int, wt *sync.WaitGroup) {
ch <- 5
log.Println("send data ", 5)
wt.Done() // goroutine 结束时,计数器-1
}(noChan, waiter)
waiter.Wait()*/
// Go 通过向一个通道发送 `os.Signal` 值来进行信号通知。
// 创建一个通道来接收这些通知(同时还创建一个用于在程序可以结束时进行通知的通道)。
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
// `signal.Notify` 注册这个给定的通道用于接收特定信号。
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
//signal.Notify(sigs, os.Interrupt)
// 启用Go协程执行一个阻塞的信号接收操作。
go func() {
/*for s := range sigs {
switch s {
case syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT:
//os.Exit(1)
default:
log.Println("other", s)
}
}*/
/*select {
case sig := <-sigs:
log.Printf("Got %s signal. Aborting...\n", sig)
//os.Exit(1)
}*/
// 得到一个信号值
sig := <-sigs
log.Println("得到一个信号值:", sig)
DestroyTempDir()
// 通知程序可以退出
done <- true
}()
// 程序将在这里进行等待,直到它得到了期望的信号
// (也就是上面的 Go 协程发送的 `done` 值)然后退出。
<-done
}