You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言使用flag包时为何无法通过指针获取更新后的返回值

2021年9月26日更新

这是一个很基础的问题。
原因是flag变量会在调用flag.Parse()之后才会被更新。

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

因此最佳实践是使用flag.IntVar(),代码写法也更简洁。

问题:为什么不能直接解引用flag返回值的指针?

错误写法如下,运行后总是返回默认值:

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

// 运行命令:test -n 200
// 输出结果:10000
// 取值仍然是默认值10000

需要使用如下写法才能正常获取传入的参数:

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

// 运行命令:test -n 200
// 输出结果:200
// 值已更新为传入的新flag值200

内容的提问来源于stack exchange,提问作者fripSide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:57:03