Go语言中的标志解释

huangapple go评论144阅读模式
英文:

Explanation of Flags in Go

问题

有人能解释一下Go语言中的flags吗?

flag.Parse()
var omitNewline = flag.Bool("n", false, "不打印最后的换行符")
英文:

Can anyone explain flags in Go?

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

答案1

得分: 11

flags 是一种常见的指定命令行程序选项的方式。

package main

import (
  "flag"
  "fmt"
)

var (
  env *string
  port *int
)

// 对于字符串、整数和布尔选项,可以使用基本的标志声明。
func init() {
  env = flag.String("env", "development", "一个字符串")
  port = flag.Int("port", 3000, "一个整数")
}

func main() {

  // 在声明所有标志后,调用flag.Parse()来执行命令行解析。
  flag.Parse()

  // 这里我们只是打印出解析的选项和任何后续的位置参数。
  // 注意,我们需要使用 *env 等来解引用指针以获取实际的选项值。
  fmt.Println("env:", *env)
  fmt.Println("port:", *port)

}

运行程序:

go run main.go

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

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

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

英文:

flags are a common way to specify options for command-line programs.

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)

}

Run Programs:

go run main.go

Try out the run program by first giving it without flags. Note that if you omit flags they automatically take their default values.

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

If you provide a flag with specified value then default will overwrite by passed one.

答案2

得分: 2

flag 用于解析命令行参数。如果你将“-n”作为命令行参数传递,omitNewLine 将被设置为 true。在教程中稍后会有更详细的解释:

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

英文:

flag is used to parse command line arguments. If you pass "-n" as a command line argument, omitNewLine will be set to true. It's explained a bit farther in the tutorial :

> Having imported the flag package, line 12 creates a global variable to hold the value of echo's -n flag. The variable omitNewline has type *bool, pointer to bool.

答案3

得分: 2

请参阅http://golang.org/pkg/flag/以获取完整描述。

flag.Bool的参数为(name string,value bool,usage string)

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

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

英文:

See http://golang.org/pkg/flag/ for a full description.

The arguments for flag.Bool are (name string, value bool, usage string)

name is the argument to look for, value is the default value and
usage describes the flag's purpose for a -help argument or similar, and is displayed with flag.Usage().

For more detailed example check here

答案4

得分: 0

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

package main
import "flag"

func main() {
   var omitNewline bool
   flag.BoolVar(&omitNewline, "n", false, "不打印最后的换行符")
   flag.Parse()
   println(omitNewline)
}

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

英文:

Personally, I prefer the Var type functions, as they take a reference, rather
than returning a reference. That way you can use the variable without
dereferencing:

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

huangapple
  • 本文由 发表于 2009年11月13日 11:09:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/1726891.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定