docopt.go
docopt.go copied to clipboard
Enable option to disable/enable check for non-zero values during Bind
It would be great if it was possible to disable the non-zero check during a bind, so that we can pre-populate certain values and allow for DocOpt to over-ride when necessary.
My use case is i'm using another library to first parse environment variables, and would like program arguments to over-ride when necessary.
Maybe this logic would break other things, so if there's a better suggestion to combine Environment variables with DocOpt i'd love to hear them!
Have same issue, want to override options parsed from config. Now I have to create two structs and merge them with some additional code.
The simplest solution is probably to fork docopt.go
repo and remove that check. It doesn't seems to update too often anyway.
I use a "hack" where i populate the default values before parsing, this is of course not so clean, but works great for defaults when these are OS specific
defaultConfFile := pathlib.Join(confDir, "naval.conf")
usageTemplate := `Naval
.....
Options:
-c <path> Config path [default: %s].
....`
usage := fmt.Sprintf(usageTemplate, defaultConfFile)
opts, err := docopt.ParseDoc(usage)
...
Interesting. Sprintf
is a bit clunky though, you have to list every option you have in config struct, in correct order. This could be error-prone.
Interesting.
Sprintf
is a bit clunky though, you have to list every option you have in config struct, in correct order. This could be error-prone.
You could use whatever template engine you want :) But as my os specific often only is one or two Sprintf is fine.