英文:
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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论