123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // 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 flag_test
- import (
- "errors"
- "flag"
- "fmt"
- "strings"
- "time"
- )
- // 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: Two flags sharing a variable, so we can have a shorthand.
- // The order of initialization is undefined, so make sure both use the
- // same default value. They must be set up with an init function.
- var gopherType string
- func init() {
- const (
- defaultGopher = "pocket"
- usage = "the variety of gopher"
- )
- flag.StringVar(&gopherType, "gopher_type", defaultGopher, usage)
- flag.StringVar(&gopherType, "g", defaultGopher, usage+" (shorthand)")
- }
- // 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)
- }
- // 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.
- }
|