Go📦Standard Libraryintermediate
flag — Command-Line Flags
Go · Standard Library · Run with go run
Explanation
The `flag` package parses command-line arguments into typed values. `flag.String`, `flag.Int`, and `flag.Bool` declare flags with a name, default, and usage string, returning a pointer. `flag.Parse()` populates them from `os.Args`. It auto-generates `-h`/`--help` output and reports unknown flags.
Real-World Scenario
A CLI tool needs `--port`, `--verbose`, and `--config` options. Declaring them with `flag` gives typed values, default fallbacks, and a usage message for free — no manual `os.Args` parsing.
Quick Snippet
snippet.go
import "flag"
func main() {
port := flag.Int("port", 8080, "server port")
verbose := flag.Bool("verbose", false, "enable verbose logging")
config := flag.String("config", "config.json", "config file path")
flag.Parse()
fmt.Printf("port=%d verbose=%t config=%s\n",
*port, *verbose, *config)
// Non-flag args (e.g. positional file names)
fmt.Println("remaining args:", flag.Args())
}
// Run: go run main.go -port 9000 -verboseFull Example
flag_pkg.go
// Compile: go run flag_pkg.go
// With args: go run flag_pkg.go -port 9000 -verbose
// Output (with no args, defaults are used):
// port=8080 verbose=false config=config.json
// remaining args: []
package main
import (
"flag"
"fmt"
)
func main() {
port := flag.Int("port", 8080, "server port")
verbose := flag.Bool("verbose", false, "enable verbose logging")
config := flag.String("config", "config.json", "config file path")
flag.Parse()
fmt.Printf("port=%d verbose=%t config=%s\n", *port, *verbose, *config)
fmt.Println("remaining args:", flag.Args())
}
Run command
go run flag_pkg.go