6

任何人都可以解释 Go 中的标志吗?

flag.Parse()
var omitNewline = flag.Bool("n", false, "don't print final newline")
4

4 回答 4

9

标志是为命令行程序指定选项的常用方法。

package main

import (
  "flag"
  "fmt"
)

var (
  env *string
  port *int
)

// Basic flag declarations are available for string, integer, and boolean options.
func init() {
  env = flag.String("env", "development", "a string")
  port = flag.Int("port", 3000, "an int")
}

func main() {

  // Once all flags are declared, call flag.Parse() to execute the command-line parsing.
  flag.Parse()

  // Here we’ll just dump out the parsed options and any trailing positional 
  // arguments. Note that we need to dereference the points with e.g. *evn to 
  // get the actual option values.
  fmt.Println("env:", *env)
  fmt.Println("port:", *port)

}

运行程序:

go run main.go

首先给它不带标志来尝试运行程序。请注意,如果您省略标志,它们会自动采用默认值。

go run command-line-flags.go --env production --port 2000

如果您提供具有指定值的标志,则默认值将被传递的标志覆盖。

于 2014-06-13T07:28:04.723 回答
2

flag用于解析命令行参数。如果您将“-n”作为命令行参数传递,则 omitNewLine 将设置为 true。教程中对此进行了更深入的解释:

导入标志包后,第 12 行创建一个全局变量来保存 echo 的 -n 标志的值。变量 omitNewline 的类型为 *bool,指向 bool。

于 2009-11-13T03:13:20.080 回答
2

有关完整说明,请参见http://golang.org/pkg/flag/

flag.Bool 的参数是(名称字符串、布尔值、使用字符串)

name 是要查找的参数,value 是默认值,usage 描述了 -help 参数或类似参数的标志用途,并使用 flag.Usage() 显示。

有关更详细的示例,请查看此处

于 2009-11-13T03:46:17.360 回答
0

就个人而言,我更喜欢Var类型函数,因为它们接受引用,而不是返回引用。这样您就可以在不取消引用的情况下使用变量:

package main
import "flag"

func main() {
   var omitNewline bool
   flag.BoolVar(&omitNewline, "n", false, "don't print final newline")
   flag.Parse()
   println(omitNewline)
}

https://golang.org/pkg/flag#BoolVar

于 2021-05-30T13:46:40.417 回答