无法通过指针获取函数 return 值

cannot obain the function return values via pointers

更新2021-9-26
我发现这是一个愚蠢的问题。

这是因为标志将在调用 flag.Parse() 后更新。

nReq := *flag_var
flag.Parse() // flag_var update
fmt.Println(nReq) // nReq is unchanged. 

因此,最佳做法是改用 flag.IntVar(),这样我们可以输入更少的字符。


为什么我不能像这样使用 return 值的点类型?

// test.go
nReq := *flag.Int("n", 10000, "set total requests")
flag.Parse()
fmt.Println(nReq)

// test -n 200
10000
// the value is still 10000.

它总是return默认值(10000)。
我需要使用:

nReq := flag.Int("n", 10000, "set total requests")
flag.Parse()
fmt.Println(*nReq)

// test -n 200
200
// the value is updated to the new flag(200)

flag.Int() 不会“立即”解析标志,它只是 returns 一个指向变量的指针,在解析时将存储标志值。

因此,如果您立即取消引用它,您只会获得您提供的默认值。你必须打电话给 flag.Parse().

如果您不想使用指针,请先声明变量,然后使用 flag.IntVar(),例如:

var nReq int
flag.IntVar(&nReq, "n", 10000, "set total requests")

flag.Parse()
fmt.Println(nReq)

现在 nReq 不是指针,您可以使用它而不必一直取消引用。

另一种选择是继续使用 int.Var(),并取消引用返回的指针 onceafter flag.Parse()已被调用:

nReqPtr := flag.Int("n", 10000, "set total requests")
flag.Parse()

nReq := *nReqPtr
fmt.Println(nReq)