| // 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) | |
| } |