// 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. // Hello is a hello, world program, demonstrating // how to write a simple command-line program. // // Usage: // // hello [options] [name] // // The options are: // // -g greeting // Greet with the given greeting, instead of "Hello". // // -r // Greet in reverse. // // By default, hello greets the world. // If a name is specified, hello greets that name instead. package main import ( "flag" "fmt" "log" "os" "golang.org/x/example/hello/reverse" ) func usage() { fmt.Fprintf(os.Stderr, "usage: hello [options] [name]\n") flag.PrintDefaults() os.Exit(2) } var ( greeting = flag.String("g", "Hello", "Greet with `greeting`") reverseFlag = flag.Bool("r", false, "Greet in reverse") ) func main() { // Configure logging for a command-line program. log.SetFlags(0) log.SetPrefix("hello: ") // Parse flags. flag.Usage = usage flag.Parse() // Parse and validate arguments. name := "world" args := flag.Args() if len(args) >= 2 { usage() } if len(args) >= 1 { name = args[0] } if name == "" { // hello '' is an error log.Fatalf("invalid name %q", name) } // Run actual logic. if *reverseFlag { fmt.Printf("%s, %s!\n", reverse.String(*greeting), reverse.String(name)) return } fmt.Printf("%s, %s!\n", *greeting, name) }