diff --git a/README.md b/README.md index 35b07c6..d465dba 100644 --- a/README.md +++ b/README.md @@ -337,6 +337,40 @@ func main() { } ``` +Another example of using hooks is load the env-file: + +```go +package main + +import ( + "fmt" + "github.com/alecthomas/kong" + "github.com/joho/godotenv" +) + +type EnvFlag string + +// BeforeResolve loads env file. +func (c EnvFlag) BeforeReset(ctx *kong.Context, trace *kong.Path) error { + path := string(ctx.FlagValue(trace.Flag).(EnvFlag)) // nolint + path = kong.ExpandPath(path) + if err := godotenv.Load(path); err != nil { + return err + } + return nil +} + +var CLI struct { + EnvFile EnvFlag + Flag `env:"FLAG"` +} + +func main() { + _ = kong.Parse(&CLI) + fmt.Println(CLI.Flag) +} +``` + ## Flags Any [mapped](#mapper---customising-how-the-command-line-is-mapped-to-go-values) field in the command structure *not* tagged with `cmd` or `arg` will be a flag. Flags are optional by default. @@ -704,4 +738,4 @@ See the [section on hooks](#hooks-beforeresolve-beforeapply-afterapply-and-the-b ### Other options -The full set of options can be found [here](https://godoc.org/github.com/alecthomas/kong#Option). \ No newline at end of file +The full set of options can be found [here](https://godoc.org/github.com/alecthomas/kong#Option).