登录
首页 >  Golang >  Go问答

Golang flag变量调用的方式

来源:SegmentFault

时间:2023-01-12 13:02:51 362浏览 收藏

本篇文章向大家介绍《Golang flag变量调用的方式》,主要包括go,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

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

package main

import (
    "flag"
    "fmt"
)

var workers int;

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

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

好了,本文到此结束,带大家了解了《Golang flag变量调用的方式》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表