package main import ( "context" "fmt" "os" "os/signal" "strings" "syscall" ) func main() { err := run() if err != nil { fmt.Fprintln(os.Stderr, "onechat:", err) os.Exit(1) } } func run() error { ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer cancel() args := os.Args[1:] switch { case len(args) == 0: _, err := fmt.Println("onechat") if err != nil { return err } case len(args) == 1 && args[0] == "login": err := login(ctx, os.Stdout) if err != nil { return err } default: return fmt.Errorf("unknown command %q", strings.Join(args, " ")) } return ctx.Err() }