阻止^ C在Go中的Ctrl + C上显示

I'd like to prevent "^C" from being outputted to the terminal when Ctrl+C is pressed.

I'm capturing the interrupt command like this:

c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
signal.Notify(c, syscall.SIGTERM)
go func() {
    <-c
    // exit code here
}()

... however, when I press Ctrl+C, "^C" is outputted into the terminal. This isn't ideal.

If you put the terminal into raw mode, you'll get the keystrokes directly and the tty won't interpret them (and display ^C).

I'm not sure of the best way to set raw mode in Go, but golang.org/x/crypto/ssh/terminal's RawMode() does it. You would then have to enable INT and TERM handling otherwise you'll receive a ^C as input, instead having it be processed as an interruption.

An explanation of raw mode is here: https://unix.stackexchange.com/questions/21752/what-s-the-difference-between-a-raw-and-a-cooked-device-driver

A similar answer is here: https://superuser.com/questions/147013/how-to-disable-c-from-being-echoed-on-linux-on-ctrl-c

If you print something afterwards, you can do

fmt.Print("")
log.Println("Shutting down")

is a carriage return character; it tells your terminal emulator to move the cursor at the start of the line. This way you can overwrite the ^C on the terminal.