为了账号安全,请及时绑定邮箱和手机立即绑定

无法通过指针返回函数值

无法通过指针返回函数值

Go
冉冉说 2022-10-04 16:25:33
更新 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)


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 57 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信