Go语言命令行和运算符

命令行参数

  • 在Go语言中main函数是不接收任何参数的, 但是还是可以通过其它方式来接收命令行参数
方法一 导入os包,然后通过os包的Args属性获取命令行参数
  • 注意点:
    1. 和C语言一样, 默认会将当前被执行程序的可执行文件的路径传递给我们
    2. 和C语言一样, 无论外界传入的数据是什么类型, OS包拿到的都是字符串类型
  • 通过os包获取命令行参数的弊端:
    1. 如果用户少传入了参数, 会报错
    2. 无论用户传入的是什么类型, 最终获取到的都是字符串类型
    3. 传递参数的时候, 必须按照业务逻辑的顺序来传递, 传递的顺序不能被打乱
fmt.Println(os.Args[0]) fmt.Println(os.Args[1]) fmt.Println(os.Args[2]) fmt.Printf("%T\n", os.Args[0]) fmt.Printf("%T\n", os.Args[1]) fmt.Printf("%T\n", os.Args[2])

方法二 导入flag包,通过flag包中的stringVar函数获取
  • flag.StringVar(&name, "name", "默认的名称", "接收用户的姓名")
    • 第一个参数: 要把接收到的数据保存到哪
    • 第二个参数: 用于接收的字段名称 -name=lnj
    • 第三个参数: 如果用户没有传递参数时的默认值
    • 第四个参数: 用户输入--help的时候的提示信息
  • 注意点: 通过flag包接收用户输入的命令行参数, 还必须将编写好的参数注册到命令行(flag.Parse())
var name string flag.StringVar(&name, "name", "默认姓名", "接收姓名") var age int flag.IntVar(&age, "age", -1, "接收年龄") var height float64 flag.Float64Var(&height, "height", 0.0, "接收身高")flag.Parse()//注册命令行参数fmt.Println(name) fmt.Printf("%T\n", name) fmt.Println(age) fmt.Printf("%T\n", age) fmt.Println(height) fmt.Printf("%T\n", height)

运算符 只列与C语言不同的地方
1.++ , --不能放在变量前
2.不同类型的变量不能进行运算
3.+号可以用于拼接字符串
4.Go语言没有非0即真的概念,所有的关系运算符返回的都是true和false
【Go语言命令行和运算符】5.Go语言多一个逻辑清零运算符
&^ 逻辑清零运算符
假如a = 9 ,b = 6
a &^ b如下
如果b的二进制的当前位是1, 那么就清零
如果b的二进制的当前位不是1, 那么就保留a对应二进制位的数据

    推荐阅读