Hugh's Blog

Golang 捕获 Ctrl+C 信号

今天在用 Golang 写一个小工具,类似控制台输入数据然后显示结果,不过打包出来的 exe 文件在得出结果之后就马上关闭窗口了,除非使用命令行来打开文件,网上查了下,Golang 可以捕获 Ctrl+C 信号,从而阻塞程序,简单记录下。

package main

import (
	"fmt"
	"os"
	"os/signal"
)

func main() {
	go input()

	exit := make(chan os.Signal, 1)
	done := make(chan bool)

	signal.Notify(exit, os.Interrupt)

	go func() {
		for _ = range exit {
			fmt.Println("\n")
			done <- true
		}
	}()

	<-done
}

func input() {
	var sum, input float64
	var numbers []float64

	sum = 0
	numbers = make([]float64, 0)

	fmt.Println("Number:")

	for {
		input = 0

		fmt.Scanln(&input)
		if input == 0 {
			break
		}

		numbers = append(numbers, input)
	}

	for _, v := range numbers {
		sum += v
	}

	fmt.Println("Result: ", sum)
	fmt.Println("Press ctrl+c to exit")
}