golang获取命令行参数



对于C\C++,java,或C#程序,我们可以通过入口函数(main函数)直接获取命令行参数:
int main(int argc, char **argv)
{
 printf("%s", argv[1]);
 return 0;
}

但是,golang的入口函数没有参数,无法直接获取命令行参数:

fun main() {

}


对于golang,获取命令行参数,只能通过golang提供的标准包os,或flag。

flag只能解析标准的命令行参数,例如:

program.exe -h 192.168.1.194 或 program --host 192.168.1.194(用空着将参数名和参数值分开)

program.exe -h=192.168.1.194 或 program --host=192.168.1.194(用"="将参数名和参数值分开)

program.exe -d(不带值表示bool类型,并且置为true,不加-d表示该间值为false)

获取方式如下:

 host := flag.String("h", "127.0.0.1", "host")
 daemon := flag.Bool("d", false, "daemon")

第一参数表示参数名,第二个参数表示参数值(默认),第三个参数为参数说明(意义描述)

但在使用host和daemon之前,需要调用flag.Parse()来解析命令行,因为前两句仅仅将参数存储地址告诉了flag,需要执行Parse方法之后,参数值才能写入变量


对于非标准命令行格式(如 program.exe /h192.168.1.194),我们只能通过os.Args来获取,然后自己解析

获取方式如下:

hoststr := os.Args[1] (Args[0]为program.exe)


完整源码如下:

package main

import (
	"flag"
	"fmt"
	"os"
)

func main() {
	host := flag.String("h", "127.0.0.1", "host")
	daemon := flag.Bool("d", false, "daemon")
	flag.Parse()
	fmt.Println(*host)
	fmt.Println(*daemon)
	fmt.Println(os.Args)
}

运行结果:

flagtest.exe -h 192.168.1.194 -d

191.168.1.194

true

[flagtest.exe -h 192.168.1.194 -d]



flagtest.exe -h 192.168.1.194

191.168.1.194

false

[flagtest.exe -h 192.168.1.194]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值