package main /* This simply parses the command line arguments using the default golang package called 'flag'. This can be used as a simple template to parse command line arguments in other programs. It puts everything in the 'config' package which I think is a good wrapper around the 'flags' package and doesn't need a whole mess of global variables */ import "log" import "os" import "flag" import "fmt" import "github.com/gookit/config" import "github.com/gookit/config/yaml" import "github.com/davecgh/go-spew/spew" var customUsage = func() { fmt.Fprintf(flag.CommandLine.Output(), "Usage of %s:\n", os.Args[0]) flag.PrintDefaults() fmt.Println("") fmt.Println("EXAMPLES:") fmt.Println("") fmt.Println(os.Args[0] + "--hostname test.hostname.wit.com") fmt.Println("") } func parseFlags() { var version string var race bool var hostname string var width int var height int flag.StringVar (&version, "version", "v0.1", "Set compiled in version string") flag.StringVar (&hostname, "hostname", "localhost", "Your full hostname") flag.IntVar (&width, "width", 400, "Width of the Window") flag.IntVar (&height, "height", 600, "Height of the Window") flag.BoolVar (&race, "race", race, "Use race detector") // Set the output if something fails to stdout rather than stderr flag.CommandLine.SetOutput(os.Stdout) flag.Usage = customUsage flag.Parse() if flag.Parsed() { log.Println("flag.Parse() worked") } else { log.Println("flag.Parse() failed") } config.Set("width", width) config.Set("height", height) config.Set("hostname", hostname) } func parseConfig() { config.WithOptions(config.ParseEnv) parseFlags() config.LoadOSEnv([]string{"MAIL"}) config.LoadOSEnv([]string{"USER"}) config.LoadOSEnv([]string{"BUILDDEBUG"}) /* urls := flag.Args() log.Println("flag.Aargs() = ", urls) for _, addr := range flag.Args() { log.Println("GET %s", addr) } */ // add driver for support yaml content config.AddDriver(yaml.Driver) config.LoadFiles("config.yml") map1 := config.StringMap("dists") spew.Dump(map1) for name, vars := range config.StringMap("dists") { log.Println("name =", name) log.Println("vars =", vars) } /* for _, addr := range config.Strings("dists") { log.Println("addr =", addr) } */ }