首页 > Golang flag变量调用的方式

Golang flag变量调用的方式

在写一些工具的时候总会使用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)
}

全局变量的方式在go中很少使用吧(你看看标准库,全局变量一般不超过三个)。我认为你可以通过包内另外定义一个取得命令行解析参数的函数。


使用flag.IntVar

package main

import (
    "flag"
    "fmt"
)

var workers int;

func main() {
  flag.IntVar(&workers,"r", 1, "concurrent processing ,default 1 .")
  flag.Parse()
  fmt.Println(workers);
}

不过从设计上来讲,用全局变量不是一个好方法

【热门文章】
【热门文章】