第3章：标识符、运算符和流程控制

标识符

什么是标识符

== 答：给变量、方法等起的名字就是标志符 ==

标识符的定义规则

1. 由 26 个英文字母大小写，0-9, _ 组成

2. 数字不可以开头

3. Golang 中严格区分大小写

4. 不能包含空格

5. 下划线 “_”本身在 Go 中是一个特殊的标识符，称为空标识符。可以代表任何其他的标识符，但是它对应的值会被忽略（比如：忽略某个返回值），所以仅能够被作为占位符使用，不能作为标识符使用

6. 不能以系统保留字作为标识符，比如 ：brack , if 等

标识符的命名规则

1. 包名，保持package的名字和目录的名字保持一致，尽量采用有意义的包名，简短，有意义，不要和标准库冲突

2. 变量名，函数名，常量名，采用驼峰命名

3. 如果变量名、函数名、常量名首字母大写，则可以被其他的包访问；如果首字母小写，则只能在本包内使用（注意：可以简单的理解为，首字母大写是公有的，首字母小写是私有的）

关键字和预定义标识符

关键字

关键字是程序发明者规定有特殊含义的单词，又叫保留字，go语言中一共有25个关键字

预定义标识符

预定义标识符一共36个，包含基础数据类型和系统内嵌函数

运算符

算数运算符

Copy
package main

import "fmt"

func main() {
// +加号的运用
//1、取正
var n1 int = +8
fmt.Println(n1)
//2、相加操作
var n2 int = 6 + 3
fmt.Println(n2)
//3、字符串拼接
var n3 string = "a" + "b" + "c"
fmt.Println(n3)

// /除号的运用
fmt.Println(10 / 3) //两个int类型运算结果为int类型
fmt.Println(10.0 / 3) //浮点类型参与运算，结果为浮点类型

// %取模(也叫余数) 等价公式 a%b=a-a/b*b
fmt.Println(10 % 3) // 1
fmt.Println(10 % -3) // -1
fmt.Println(-10 % 3) // -1
fmt.Println(-10 % -3) // 1

// ++自增和--自减运用
var a int = 10
a++ //加1操作
fmt.Println(a)
a-- //减1操作
fmt.Println(a)
}

赋值运算符

Copy
package main

import "fmt"

func main() {
var num1 int = 10
fmt.Println(num1)
var num2 int = (10+20)%3*8 - 14 // 等号右侧运算完再赋值给左侧
fmt.Println(num2)

var num3 int = 20
num3 += 20 //等价于 num3 = num3 + 20
fmt.Println(num3)

//练习 交换两个数的值(类似于交换两个杯子里的水，需要再借助第三个空杯)
var a int = 6
var b int = 9
var x int
x = a //先把a的值放到x里临时托管,所以a处于空闲状态就可以进行下一步操作
a = b //把b的值放到a里面，a就接管了b的值，b现在处于空闲状态
b = x //把x的值再放到b,x的值是a传过来的，所以等价于b接管了a的值，就实现了a和b值的交换
}

关系运算符

Copy
package main

import "fmt"

func main() {
fmt.Println(1 == 2) //判断两边是否相等，如果相等返回true，如果不相等返回false
fmt.Println(1 != 2) //判断两边是否不相等，如果不相等返回true，如果相等返回false（跟==是反的）
//其他关系运算符类比，就是符合条件返回true,不符合返回false
}

逻辑运算符

Copy
package main

import "fmt"

func main() {
//与逻辑：&&(可把true理解成真，把false理解成假,)
//都为真才为真，只要有假就为假（一颗老鼠屎坏一锅汤）
//特点：左边为假，右边不需要参与运算，结果为false
fmt.Println(true && true) //真真为真,结果为true
fmt.Println(true && false) //真假为假,结果为false
fmt.Println(false && true) //假真为假,结果为false
fmt.Println(false && false) //假假为假,结果为false
//或逻辑：||
//都为假才为假，只要有真就为真
//特点：左边为真，右边不需要参与运算，结果为true
fmt.Println(true && true) //真真为真,结果为true
fmt.Println(true && false) //真假为真,结果为true
fmt.Println(false && true) //假真为真,结果为true
fmt.Println(false && false) //假假为假,结果为false
//非逻辑：!（取相反结果）
fmt.Println(!true) //结果为false
fmt.Println(!false) //结果为true
}

位运算符

仅简单了解即可！

其他运算符

&:返回变量的存储地址

*：取指针变量对应的数值

参考指针部分：[[Go 语言入门学习笔记 / 第 4 章：复杂数据类型]]

运算符的优先级

Go 语言有几十种运算符，分割十个级别：

== 提高优先级可以加括号 ()==

获取用户终端输入

Copy
func main() {
//实现功能：键盘录入学生年龄，姓名，成绩，是否是VIP
//方式一：Scanlan
var age int
fmt.Println("请录入学生的年龄：")
//传入变量的地址的目的：在Scanln函数中，对地址中的值进行改变的时候，实际外面的age被影响了
fmt.Scanln(&age)
var name string
fmt.Println("请录入学生的姓名：")
fmt.Scanln(&name)
var score float32
fmt.Println("请录入学生的成绩：")
fmt.Scanln(&score)
var isVIP bool
fmt.Println("请录入学生是否为VIP：")
fmt.Scanln(&isVIP)
fmt.Printf("学生的姓名为：%v,年龄为：%v,成绩为：%v,是否为VIP：%v", name, age, score, isVIP)
fmt.Println()
//方式二：Scanf
fmt.Println("请录入学生的年龄, 姓名, 成绩, 是否为VIP, 用空格隔开")
fmt.Scanf("%d %s %f %t", &age, &name, &score, &isVIP)
fmt.Printf("学生的姓名为：%v,年龄为：%v,成绩为：%v,是否为VIP：%v", name, age, score, isVIP)
}