83 lines · 2.6 KB · Go
RawDownload
// 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.}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t