无法通过指针获取函数 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()
,并取消引用返回的指针 once、after flag.Parse()
已被调用:
nReqPtr := flag.Int("n", 10000, "set total requests")
flag.Parse()
nReq := *nReqPtr
fmt.Println(nReq)
更新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()
,并取消引用返回的指针 once、after flag.Parse()
已被调用:
nReqPtr := flag.Int("n", 10000, "set total requests")
flag.Parse()
nReq := *nReqPtr
fmt.Println(nReq)