mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.3 KiB
77 lines
2.3 KiB
// Copyright 2012 The Go Authors. All rights reserved. |
|
// Use of this source code is governed by a BSD-style |
|
// license that can be found in the LICENSE file. |
|
|
|
// These examples demonstrate more intricate uses of the flag package. |
|
package pflag_test |
|
|
|
import ( |
|
"errors" |
|
"fmt" |
|
"strings" |
|
"time" |
|
|
|
flag "github.com/spf13/pflag" |
|
) |
|
|
|
// Example 1: A single string flag called "species" with default value "gopher". |
|
var species = flag.String("species", "gopher", "the species we are studying") |
|
|
|
// Example 2: A flag with a shorthand letter. |
|
var gopherType = flag.StringP("gopher_type", "g", "pocket", "the variety of gopher") |
|
|
|
// Example 3: A user-defined flag type, a slice of durations. |
|
type interval []time.Duration |
|
|
|
// String is the method to format the flag's value, part of the flag.Value interface. |
|
// The String method's output will be used in diagnostics. |
|
func (i *interval) String() string { |
|
return fmt.Sprint(*i) |
|
} |
|
|
|
func (i *interval) Type() string { |
|
return "interval" |
|
} |
|
|
|
// Set is the method to set the flag value, part of the flag.Value interface. |
|
// Set's argument is a string to be parsed to set the flag. |
|
// It's a comma-separated list, so we split it. |
|
func (i *interval) Set(value string) error { |
|
// If we wanted to allow the flag to be set multiple times, |
|
// accumulating values, we would delete this if statement. |
|
// That would permit usages such as |
|
// -deltaT 10s -deltaT 15s |
|
// and other combinations. |
|
if len(*i) > 0 { |
|
return errors.New("interval flag already set") |
|
} |
|
for _, dt := range strings.Split(value, ",") { |
|
duration, err := time.ParseDuration(dt) |
|
if err != nil { |
|
return err |
|
} |
|
*i = append(*i, duration) |
|
} |
|
return nil |
|
} |
|
|
|
// Define a flag to accumulate durations. Because it has a special type, |
|
// we need to use the Var function and therefore create the flag during |
|
// init. |
|
|
|
var intervalFlag interval |
|
|
|
func init() { |
|
// Tie the command-line flag to the intervalFlag variable and |
|
// set a usage message. |
|
flag.Var(&intervalFlag, "deltaT", "comma-separated list of intervals to use between events") |
|
} |
|
|
|
func Example() { |
|
// All the interesting pieces are with the variables declared above, but |
|
// to enable the flag package to see the flags defined there, one must |
|
// execute, typically at the start of main (not init!): |
|
// flag.Parse() |
|
// We don't run it here because this is not a main function and |
|
// the testing suite has already parsed the flags. |
|
}
|
|
|