无法通过指针返回函数值

更新 2021-9-26

我发现这是一个愚蠢的问题。


这是因为标志将在调用标志后更新。解析()。


nReq := *flag_var

flag.Parse() // flag_var update

fmt.Println(nReq) // nReq is unchanged. 

因此,最佳做法是使用标志。取而代之的是 IntVar(),我们可以键入更少的字符。


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


// test.go

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

flag.Parse()

fmt.Println(nReq)


// test -n 200

10000

// the value is still 10000.

它始终返回默认值 (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)


冉冉说
浏览 98回答 1
1回答

MMTTMM

旗。Int() 不会“立即”解析标志,它只是返回一个指向变量的指针,在解析时将存储标志值。因此,如果您立即取消引用它,则只会获得您提供的默认值。你必须叫旗帜。解析()。如果不想使用指针,请在前面声明变量,并使用 flag。例如:var nReq intflag.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 := *nReqPtrfmt.Println(nReq)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go