// Package flags provides definitions for commonly used flags and, where
// appropriate, implementations of the flag.Value interface for those flags to
// ensure that only valid values of those flags are supplied. Some of these
// flags may also be specified using environment variables directly and are
// documented accordingly; in these cases the command line value takes
// precedence over the environment variable.
//
// Flags are defined as 'groups' of related flags so that the caller may choose
// which ones to use without having to be burdened with the full set. The groups
// may be used directly or via the Flags type that aggregates multiple
// groups. In all cases, the flags are registered with a supplied flag.FlagSet
// and hence are not forced onto the command line unless the caller passes in
// flag.CommandLine as the flag.FlagSet to use.
//
// In general, this package will be used by veyron profiles and the runtime
// implementations, but can also be used by any application that wants access to
// the flags and environment variables it supports.
package flags
