在写一些工具的时候总会使用flag这个package.因为很是方便.但今天我在反复调用的时候发现总是需要使用*号是否有办法不这样调用? 或者说flag的正确的变量调用应该是怎么样的.
举例说明:
我的一般用法,采用了*workers这种方式调用.
package main
import (
"flag"
"fmt"
)
var workers = flag.Int("r", 1, "concurrent processing ,default 1 .")
func main(){
flag.Parse()
fmt.Println(*workers)
}
运行:
./do -r 4 结果为4
但是我想在变量使用的时候不使用*worker,而是worker的方式.而且是一个全局变量的方式,其它函数也都可以使用,因为基本上这个变量是不会改变的.
以下是我错误的用法: 因为没有flag.Parse()所以默认的结果肯定是默认值1
package main
import (
"flag"
"fmt"
)
var workers = flag.Int("r", 1, "concurrent processing ,default 1 .")
var newworkers=*workers
func main(){
flag.Parse()
fmt.Println(newworkers)
}
运行:
./do -r 4 结果为1
如果我要正确的使用flag的变量,并且实现我的想法该如何做呢?
@jex提供的一个方法 IntVar不能在var,可以在放置在init
package main
import (
"flag"
"fmt"
)
var workers int;
func init(){
flag.IntVar(&workers,"r", 1, "concurrent processing ,default 1 .")
}
func main() {
flag.Parse()
fmt.Println(workers)
}
使用flag.IntVar
不过从设计上来讲,用全局变量不是一个好方法