- C语言中的命令行参数
在C语言中main函数可以接收两个参数
int main(int argc, const char *argv[]){}
- argc: argv中保存数据的个数
- argv: 默认情况下系统只会传入一个值, 这个值就是main函数执行文件的路径
- 我们可以通过配置开发工具,或者命令行运行时以
空格+参数形式
传递其它参数
- 注意点: 无论外界传入的是什么类型, 我们拿到的都是
字符串类型
#include <stdio.h>
int main(int argc, const char * argv[])
{
for(int i = 0; i < argc; i++){
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}
- Go语言中的命令行参数
在Go语言中main函数是不接收任何参数的, 但是还是可以通过其它方式来接收命令行参数:
-
Go语言中接收命令行参数方式一:
- 导入os包,然后通过os包的Args属性获取命令行参数
注意点:
1.和C语言一样, 默认会将当前被执行程序的可执行文件的路径传递给我们
2.和C语言一样, 无论外界传入的数据是什么类型, OS包拿到的都是字符串类型
通过os包获取命令行参数的弊端:
1.如果用户少传入了参数, 会报错
2.无论用户传入的是什么类型, 最终获取到的都是字符串类型
3.传递参数的时候, 必须按照业务逻辑的顺序来传递, 传递的顺序不能被打乱
package main
import (
"fmt"
"os" // 用于获取命令行参数的包
)
func main() {
// 1.获取传入参数个数
num := len(os.Args)
// 2.打印所有获取到的参数
for i := 0; i < num; i++ {
fmt.Println(os.Args[i])
}
}
-
Go语言中接收命令行参数方式二:
- 导入flag包,通过flag包中的stringVar函数获取
通过flag包获取命令行参数的优势:
1.如果用户少传入了参数, 不会报错
2.传递参数的时候, 不用按照业务逻辑的顺序来传递, 传递的顺序可以被打乱
注意点:
通过flag包接收用户输入的命令行参数, 还必须将编写好的参数注册到命令行
flag.Parse() //注册命令行参数
package main
import (
"flag"
"fmt"
)
func main() {
/*
flag.Xxxx(*type, name, value, usage)
第一个参数:保存命令行参数变量地址
第二个参数: 命令行参数名称
第三个参数: 命令行参数对应的默认值
第四个参数: 命令行参数对应的说明
*/
// 1.定义变量,保存命令行参数的值
var name string
var age int
// 2.设置命令行参数
flag.StringVar(&name, "name", "lnj", "请输入人的姓名")
flag.IntVar(&age, "age", 33,"请输入人的姓名")
// 3.注册解析命令行参数
flag.Parse()
// 4.使用命令行参数
fmt.Println("name = ", name)
fmt.Println("age = ", age)
}
网友评论