更新 2021-9-26我发现这是一个愚蠢的问题。这是因为标志将在调用标志后更新。解析()。nReq := *flag_varflag.Parse() // flag_var updatefmt.Println(nReq) // nReq is unchanged. 因此,最佳做法是使用标志。取而代之的是 IntVar(),我们可以键入更少的字符。为什么我不能像这样使用返回值的点类型?// test.gonReq := *flag.Int("n", 10000, "set total requests")flag.Parse()fmt.Println(nReq)// test -n 20010000// the value is still 10000.它始终返回默认值 (10000)。我需要使用:nReq := flag.Int("n", 10000, "set total requests")flag.Parse()fmt.Println(*nReq)// test -n 200200// the value is updated to the new flag(200)
1 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
旗。Int()
不会“立即”解析标志,它只是返回一个指向变量的指针,在解析时将存储标志值。
因此,如果您立即取消引用它,则只会获得您提供的默认值。你必须叫旗帜。解析()
。
如果不想使用指针,请在前面声明变量,并使用 flag。例如
:
var nReq int
flag.IntVar(&nReq, "n", 10000, "set total requests")
flag.Parse()
fmt.Println(nReq)
现在不是指针,您可以使用它而不必一直取消引用。nReq
另一种选择是继续使用 ,并在 调用后取消引用返回的指针一次:int.Var()flag.Parse()
nReqPtr := flag.Int("n", 10000, "set total requests")
flag.Parse()
nReq := *nReqPtr
fmt.Println(nReq)
- 1 回答
- 0 关注
- 57 浏览
添加回答
举报
0/150
提交
取消