Documentation ¶
Overview ¶
Package flagx extends to capabilities of flags to also be able to read from environment variables. This comes in handy when dockerizing applications.
Example ¶
package main import ( "flag" "log" "github.com/m-lab/go/flagx" ) func main() { metadata := flagx.KeyValue{} flag.Var(&metadata, "metadata", "Key-value pairs to be added to the metadata (flag may be repeated)") // Commandline flags should look like: -metadata key1=val1 -metadata key2=val2 flag.Parse() log.Println(metadata.Get()) }
Output:
Index ¶
- Variables
- func ArgsFromEnv(flagSet *flag.FlagSet) error
- func ArgsFromEnvWithLog(flagSet *flag.FlagSet, logArgs bool) error
- func AssignedFlags(flagSet *flag.FlagSet) map[string]struct{}
- func EnableAdvancedFlags()
- func MakeShellVariableName(flagName string) string
- type DateTime
- type DurationArray
- type Enum
- type File
- type FileBytes
- type FileBytesArray
- type KeyValue
- type StringArray
- type Time
- type URL
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // Advanced is a *flag.FlagSet for advanced flags. Packages should add flags // to Advanced when those flags should NOT be included in the default // flag.CommandLine flag set. Advanced flags may be enabled by calling // EnableAdvancedFlags _before_ calling flag.Parse(). Advanced = flag.NewFlagSet("advanced", flag.ExitOnError) )
var ErrBadTimeFormat = fmt.Errorf("ErrBadTimeFormat: unsupported time format")
ErrBadTimeFormat is returned when failing to parse a Time value.
Functions ¶
func ArgsFromEnv ¶
ArgsFromEnv will expand command-line argument parsing to include setting the values of flags from their corresponding environment variables. The environment variable for an argument is the upper-case version of the command-line flag.
If you have two flags that map to the same environment variable string (like "-a" and "-A"), then the behavior of this function is unspecified and should not be relied upon. Also, your flags should have more descriptive names.
func ArgsFromEnvWithLog ¶ added in v0.1.40
ArgsFromEnvWithLog operates as ArgsFromEnv with an additional option to disable logging of all flag values. This is helpful for command line applications that wish to disable extra argument logging.
func AssignedFlags ¶ added in v0.1.21
AssignedFlags returns a map[string]struct{} where every key in the map is the name of a flag in the passed-in FlagSet that was explicitly set on the command-line.
func EnableAdvancedFlags ¶ added in v0.1.42
func EnableAdvancedFlags()
EnableAdvancedFlags adds all flags registered with the Advanced flag set to the default flag.CommandLine flag set. EnableAdvancedFlags should be called before flag.Parse().
func MakeShellVariableName ¶ added in v0.1.21
MakeShellVariableName makes every passed-in string match the regexp [A-Z_][A-Z0-9_]* Characters in shell variable names should be part of the portable character set (defined to be [A-Z0-9_] in https://pubs.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap08.html) and may not begin with a digit.
Types ¶
type DateTime ¶ added in v0.1.21
DateTime is a flag type for accepting date parameters.
type DurationArray ¶ added in v0.1.30
DurationArray collects time.Durations so a duration flag can be specified multiple times or using "," separated items. The default argument should almost always be the empty array, because there is no way to remove an element, only to add one.
func (DurationArray) Get ¶ added in v0.1.30
func (da DurationArray) Get() interface{}
Get retrieves the value contained in the flag.
func (*DurationArray) Set ¶ added in v0.1.30
func (da *DurationArray) Set(s string) error
Set appends the given time.Duration to the DurationArray. Set accepts multiple durations separated by commas "," and appends each element to the DurationArray.
func (DurationArray) String ¶ added in v0.1.30
func (da DurationArray) String() string
String reports the DurationArray as a Go value.
type Enum ¶ added in v0.1.20
Enum is a new flag type. An Enum contains an array of Options and a selected Value.
type File ¶ added in v0.1.42
File is a new flag type. For a given filename, File reads and saves the file content to Bytes and the original filename to Name. Errors opening or reading the file are handled during flag parsing.
type FileBytes ¶
type FileBytes []byte
FileBytes is a new flag type. It automatically reads the content of the given filename as a `[]byte`, handling errors during flag parsing.
func (FileBytes) Get ¶
func (fb FileBytes) Get() interface{}
Get retrieves the bytes read from the file (or the default bytes).
func (*FileBytes) Set ¶
Set accepts a filename and reads the bytes associated with that file into the FileBytes storage.
func (FileBytes) String ¶
String reports the FileBytes content as a string.
FileBytes are awkward to represent in help text, and such help text is the main use of the Stringer interface for this flag. Help text like:
"Sets the file containing the prefix string. The default file contents are: " + fb.String()
is recommended.
type FileBytesArray ¶ added in v0.1.41
type FileBytesArray struct {
// contains filtered or unexported fields
}
FileBytesArray is a new flag type that combines the semantics of StringArray for multiple filenames and FileBytes for reading the content of each file. Every filename is read as a `[]byte` and the contents appended to an FileBytesArray of type `[][]byte`.
Like StringArray, the flag parameter may be specified multiple times or using "," separated items. Unlike other Flag types, the default argument should almost always be the empty array, because there is no way to remove an element, only to add one.
func (*FileBytesArray) Get ¶ added in v0.1.41
func (fb *FileBytesArray) Get() [][]byte
Get retrieves the bytes read from the file (or the default bytes).
func (*FileBytesArray) Set ¶ added in v0.1.41
func (fb *FileBytesArray) Set(s string) error
Set accepts a filename (or filenames separated by comma) and reads the bytes associated with the file and appends the bytes the FileBytesArray.
func (FileBytesArray) String ¶ added in v0.1.41
func (fb FileBytesArray) String() string
String reports the original FileBytesArray filenames a string.
type KeyValue ¶ added in v0.1.20
type KeyValue struct {
// contains filtered or unexported fields
}
KeyValue is a way of setting the elements of a map[string]string individually as key-value pairs on the command-line. It is designed to be used as a repeated argument, where each invocation of the command-line argument will add another key value pair.
One use for this library could be to specify metadata headers.
func (*KeyValue) Get ¶ added in v0.1.20
Get returns a copy of the KeyValue object as a map[string]string. This new map may be modified as desired without worrying about modifying the command-line arguments.
type StringArray ¶
type StringArray []string
StringArray is a new flag type. It appends the flag parameter to an `[]string` allowing the parameter to be specified multiple times or using "," separated items. Unlike other Flag types, the default argument should almost always be the empty array, because there is no way to remove an element, only to add one.
func (StringArray) Contains ¶ added in v0.1.21
func (sa StringArray) Contains(value string) bool
Contains returns true when the given value equals one of the StringArray values.
func (StringArray) Get ¶
func (sa StringArray) Get() interface{}
Get retrieves the value contained in the flag.
func (*StringArray) Set ¶
func (sa *StringArray) Set(s string) error
Set accepts a string parameter and appends it to the associated StringArray. Set attempts to split the given string on commas "," and appends each element to the StringArray.
func (StringArray) String ¶
func (sa StringArray) String() string
String reports the StringArray as a Go value.
type Time ¶ added in v0.1.21
Time is a flag type for accepting time parameters formatted as HH:MM:SS. If you need sub-second resolution, consider using one of the unix timestamp formats (ms, usec, or ns) supported by DateTime.
type URL ¶ added in v0.1.30
URL is a flag type for parsing URL strings and handling errors during flag parsing. Use MustNewURL() to specify a default value.
func MustNewURL ¶ added in v0.1.30
MustNewURL creates a new flagx.URL initialized with the given value. Failure to parse is fatal. For example:
f := flagx.MustNewURL("http://example.com")