I’m constructing a Go CLI utility utilizing Cobra and Viper libraries with quite a few non-compulsory flags (10+). My main aim is to execute actions solely when their corresponding flags are particularly supplied by the person.
I’ve tried follwoing strategy: Using cmd.Flags().StringVar(flagVar, flagName, defaultValue, utilization) and cmd.Flag(“flagName”).Modified
Considerations:
- Repetition of flag names.
- Implicit binding between flagName and flagVariable.
I’ve explored an choice to make use of viper.BindPFlag and viper.IsSet, nevertheless it hasn’t given a solution to any of my issues, and it looks like overkill for this comparatively easy activity.
Mitigations Thought-about:
- Constants/Enum for Flag Names: Lessens typos, however mismatches might nonetheless happen.
- Devoted Flag Administration Class: Doubtlessly over-engineered for this use case.
Query:
Are there established Go patterns for managing a considerable variety of non-compulsory flags that:
- Decrease the necessity to repeat flag names (decreasing error potential)?
- Promote maintainability with out introducing pointless complexity?
On the lookout for some lib to deal with these points (or porper use of cobra/viper that I’m lacking).
I sadly don’t have plenty of expertise on this house (I take advantage of Go primarily for internet APIs and CLI instruments with out too many non-compulsory flags often). My solely thought right here is: perhaps you can see how a fancy challenge just like the GitHub CLI is managing flags. Verify this out for instance:
And the nested instructions dwell in pkg/cmd. You would go spelunking by way of that code to get concepts. You would additionally check out how Docker is coping with a considerable amount of flags.
Different ideas: you can doubtlessly leverage struct tags. There are fairly a number of initiatives on the market that do that for you nevertheless it’s not laborious to roll your personal. Check out this challenge for inspiration (or simply add that as a dependency!).
Definitely! For managing numerous non-compulsory flags in your Go CLI utility:
Outline constants for flag names to cut back typos and guarantee consistency.
Group associated flags underneath a single struct for simpler administration.
Think about using subcommands as a substitute of flags for a number of actions.
Encapsulate flag logic in capabilities or strategies for modularization.
Use flag presets for generally used flag combos.
As for libraries, Cobra and Viper are stable selections for constructing CLI purposes in Go. They provide strong options for flag administration and configuration parsing.