এটি পরিষ্কার করার জন্য আপনার কিছু কাজ করার ক্ষেত্রে এটি অন্য সংস্করণ। কোড তাদের পদ্ধতিতে পরিষ্কার প্রক্রিয়া ছাড়বে will
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func main() {
_,done1:=doSomething1()
_,done2:=doSomething2()
//do main thread
println("wait for finish")
<-done1
<-done2
fmt.Print("clean up done, can exit safely")
}
func doSomething1() (error, chan bool) {
//do something
done:=make(chan bool)
c := make(chan os.Signal, 2)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
//cleanup of something1
done<-true
}()
return nil,done
}
func doSomething2() (error, chan bool) {
//do something
done:=make(chan bool)
c := make(chan os.Signal, 2)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
//cleanup of something2
done<-true
}()
return nil,done
}
আপনি যদি প্রধান ফাংশনটি পরিষ্কার করতে চান তবে আপনাকে ফান () ব্যবহার করে মূল থ্রেডে সিগন্যাল ক্যাপচার করতে হবে।