github.com/wallyqs/gcli@v0.2.3-0.20151010121825-a114d5d1758d/skeleton/resource/tmpl/flag/cli.go.tmpl (about) 1 package main 2 3 import ( 4 "fmt" 5 "io" 6 "flag" 7 ) 8 9 // Exit codes are int values that represent an exit code for a particular error. 10 const ( 11 ExitCodeOK int = 0 12 ExitCodeError int = 1 + iota 13 ) 14 15 // CLI is the command line object 16 type CLI struct { 17 // outStream and errStream are the stdout and stderr 18 // to write message from the CLI. 19 outStream, errStream io.Writer 20 } 21 22 // Run invokes the CLI with the given arguments. 23 func (cli *CLI) Run(args []string) int { 24 var ( 25 {{ range .Flags }}{{ .Name }} {{ .TypeString }} 26 {{ end }} 27 ) 28 29 // Define option flag parse 30 flags := flag.NewFlagSet(Name, flag.ContinueOnError) 31 flags.SetOutput(cli.errStream) 32 33 {{ range .Flags }}{{ if eq .TypeString "string" }}flags.{{ title .TypeString}}Var(&{{ .Name }}, "{{ .LongName }}", "{{ .Default }}", "{{ .Description }}") 34 flags.{{ title .TypeString}}Var(&{{ .Name }}, "{{ .ShortName }}", "{{ .Default }}", "{{ .Description }}(Short)") 35 {{ else }}flags.{{ title .TypeString}}Var(&{{ .Name }}, "{{ .LongName }}", {{ .Default }}, "{{ .Description }}") 36 flags.{{ title .TypeString}}Var(&{{ .Name }}, "{{ .ShortName }}", {{ .Default }}, "{{ .Description }}(Short)"){{ end }} 37 {{ end }} 38 flVersion := flags.Bool("version", false, "Print version information and quit.") 39 40 // Parse commandline flag 41 if err := flags.Parse(args[1:]); err != nil { 42 return ExitCodeError 43 } 44 45 // Show version 46 if *flVersion { 47 fmt.Fprintf(cli.errStream, "%s version %s\n", Name, Version) 48 return ExitCodeOK 49 } 50 51 {{ range .Flags }} 52 _ = {{ .Name }} 53 {{ end }} 54 55 return ExitCodeOK 56 }