考虑 gopl.io/ch2/echo4
中的以下代码
package main
import (
"flag"
"fmt"
"strings"
)
var n = flag.Bool("n", false, "omit trailing newline")
var sep = flag.String("s", " ", "separator")
func main() {
flag.Parse()
fmt.Print(strings.Join(flag.Args(), *sep))
if !*n {
fmt.Println()
}
}
我很感兴趣,为什么变量
n
和sep
是指向标志变量而不是普通变量类型的指针。
最佳答案
这是因为在创建之后需要为其分配值。操作顺序为:
var n = flag.Bool("n", false, "omit trailing newline")
现在该值为false。 flag.Parse()
分配值。现在为变量分配了作为命令行参数传递的值。 关于pointers - 为什么Go的package标志使用指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60736758/