--- /dev/null
+// Copyright 2023 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.
+
+package flag_test
+
+import (
+ "flag"
+ "fmt"
+ "time"
+)
+
+func ExampleFlagSet() {
+
+ start := func(args []string) {
+ // A real program (not an example) would use flag.ExitOnError.
+ fs := flag.NewFlagSet("start", flag.ContinueOnError)
+ addr := fs.String("addr", ":8080", "`address` to listen on")
+ if err := fs.Parse(args); err != nil {
+ fmt.Printf("error: %s", err)
+ return
+ }
+ fmt.Printf("starting server on %s\n", *addr)
+ }
+
+ stop := func(args []string) {
+ fs := flag.NewFlagSet("stop", flag.ContinueOnError)
+ timeout := fs.Duration("timeout", time.Second, "stop timeout duration")
+ if err := fs.Parse(args); err != nil {
+ fmt.Printf("error: %s", err)
+ return
+ }
+ fmt.Printf("stopping server (timeout=%v)\n", *timeout)
+ }
+
+ main := func(args []string) {
+ subArgs := args[2:] // Drop program name and command.
+ switch args[1] {
+ case "start":
+ start(subArgs)
+ case "stop":
+ stop(subArgs)
+ default:
+ fmt.Printf("error: unknown command - %q\n", args[1])
+ // In a real program (not an example) print to os.Stderr and exit the program with non-zero value.
+ }
+ }
+
+ main([]string{"httpd", "start", "-addr", ":9999"})
+ main([]string{"httpd", "stop"})
+ main([]string{"http", "start", "-log-level", "verbose"})
+
+ // Output:
+ // starting server on :9999
+ // stopping server (timeout=1s)
+ // error: flag provided but not defined: -log-level
+}