warg
pflag
warg | pflag | |
---|---|---|
7 | 13 | |
13 | 2,312 | |
- | - | |
7.3 | 0.0 | |
8 days ago | 12 days ago | |
Go | Go | |
MIT License | BSD 3-clause "New" or "Revised" License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
warg
-
An Efficient Struct Configuration Pattern For Golang
Funcopts aren't always appropriate, but boy do they make things more readable sometimes. I use them pervasively in warg to allow declarative nested CLI commands
-
Which packages do you recommend for building cli tools?
I wrote my own! https://github.com/bbkane/warg/
-
Major standard library changes in Go 1.20
Very useful! I'll be playing with the error tree additions and studying the HTTP interface extension to see if I can replicate the pattern for https://github.com/bbkane/warg values. Id like to be able to have value-specific output for different types of --help , even ones not in warg
-
Have you used generics?
I'm using to allow for custom flag types in my CLI parsing library- a lot less duplicate code
-
Go: Functional Options Are Slow
One thing that I find nicer with functional options is building tree-like data structures.
My command line parsing library uses them to declaratively build CLI apps with arbitrarily nested subcommands.
Some examples at https://github.com/bbkane/warg/tree/master/examples
-
How are YOU using generics so far?
I'm writing a CLI parsing library, and generics have let me consolidate most of the flag value functionality for different types. So the flags for dbz --level 9000 --type superSaiyan share most of the same code even though one is an int and one is a string. So much fewer copy-paste-modify lines of code now!
-
Unix command line conventions over time
This is largely what the Azure CLI does. It simplifies even further by eliminating the no-value option. Instead, you pass "true" or "false" as the value ( --example true ). It's a little more verbose but very easy to parse/write/generate. I like this convention so much I stole it for my homemade Golang CLI parsing library https://github.com/bbkane/warg/ .
pflag
-
issue with pflag flagset
My understanding is that you can use pflag as a drop in replacement of the standard lib's flag (import flag "github.com/spf13/pflag"). So it can be used as a standalone lib I suppose.
-
Which packages do you recommend for building cli tools?
I realy enjoyed the patched version from spf13 with "--" support https://github.com/spf13/pflag
-
Define custom command-line flag types in Go 1.19
Nice, but Cobra (with pflag underneath) is so, so better.
-
-h --help -help help --? -? ????
Not by default on stdlib. There are libraries available though - https://github.com/spf13/pflag
-
Coral, a friendly Cobra fork with nearly all its features, but only 4 dependencies
Flag functionality is provided by the pflag library, a fork of the flag standard library which maintains the same interface while adding POSIX compliance.
-
xflags: An approach to command line flags with support for subcommands, positional args, environment variables, etc.
How does it compare to https://github.com/spf13/pflag ?
-
The flag package: strange but good?
spf13 has a drop in pflag that does the - short and -- long flags.
-
What are your favorite packages to use?
oklog/ulid to generate IDs. coreos/go-oidc for validating JWTs I get from auth. google/go-cmp for comparing structs in tests (unless the project is already using Testify). spf13/pflag because life's too short for Go's flag handling. getkin/kin-openapi for validating reqests/responses against my OpenAPI spec (in tests).
-
akamensky/argparse: Argparse for Golang. Just because "flag" sucks!
What are the benefits of this package over the widely used spf13/pflag?
-
Go’s highly modular nature makes it particularly good for situations where requirements are changing or evolving.
3
What are some alternatives?
graph - A library for creating generic graph data structures and modifying, analyzing, and visualizing them.
flag - Flag is a simple but powerful command line option parsing library for Go support infinite level subcommand
cli-guidelines - A guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern day.
cobra - A Commander for modern Go CLI interactions
workgroup - Structured concurrency manager for Go
kingpin - CONTRIBUTIONS ONLY: A Go (golang) command line and flag parser
golang-generics-dao-example - Example using Generics with DAO
go-flags - go command line option parser
scan - Scan provides the ability to to scan sql rows directly to any defined structure.
complete - bash completion written in go + bash completion for go command
RCIG_Coordination_Repo - A Coordination repo for all things Rust Cryptography oriented
argparse - Argparse for golang. Just because `flag` sucks