go基础之服务退出问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hjxzb/article/details/81319100

最近学习公司微服务的代码,看到每一个微服务的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随之停止运行。

猜你喜欢

转载自blog.csdn.net/hjxzb/article/details/81319100