package main import ( "errors" "fmt" "os" ) var mainUsage = []string{ "-C [-q] -p pubkey -x sigfile [file ...]", "-G [-n] [-c comment] -p pubkey -s seckey", "-S [-ez] [-x sigfile] -s seckey -m message", "-V [-eqz] [-p pubkey] [-t keytype] [-x sigfile] -m message", } var ErrEZ = errors.New("can't combine -e and -z options") func usage() { fmt.Println("Usage:") for _, u := range mainUsage { fmt.Printf(" %v\n", u) } os.Exit(2) } func fail(err error) { fmt.Println(err) os.Exit(1) } var modes = map[string]func([]string) error{ "-C": check, "-G": generate, "-S": sign, "-V": verify, } func main() { if len(os.Args) < 2 { usage() } mode, ok := modes[os.Args[1]] if !ok { usage() } if err := mode(os.Args[2:]); err != nil { fail(err) } }