最近学习公司微服务的代码,看到每一个微服务的main函数都阻塞在那里,然后里面起的goroutine一直在哪里运行。
package main
import(
"fmt"
"os"
"os/signal"
"syscall"
"log"
"time"
)
func testFunc() error {
go func(){
for{
fmt.Printf("testing....\n")
time.Sleep(time.Minute)
}
}()
return nil
}
func exitFunc(){
fmt.Println("i am exiting!")
}
func main(){
logger := log.New(os.Stdout, "[TestGoroutine]", log.Lshortfile | log.Ldate | log.Ltime) //初始化日志
exit := make(chan os.Signal,10) //初始化一个channel
signal.Notify(exit, syscall.SIGINT, syscall.SIGTERM) //notify方法用来监听收到的信号
testFunc()
sig := <-exit
logger.Printf("%s",sig.String())
exitFunc()
}
代码输出
[root@localhost demoproject]# go run test.go
testing....
^C[TestGoroutine]2018/07/31 19:26:14 test.go:36: interrupt
i am exiting!
可以看到知道按了ctrl+c之后才退出main函数的运行。然后goroutine随之停止运行。