数据类型
复制代码
### 基本数据类型
1. 布尔类型(bool):取值为true或false 。 声明的时候,默认值是 false
2. 整数类型(int):包括int8、int16、int32、int64等。声明的时候,默认值 是 0
3. 浮点数类型(float):包括float32和float64。 声明的时候,默认值是 0.0
4. 字符串类型(string):由一串字符组成 。 声明的时候,默认值是 空字符串
5. 字节类型(byte):相当于uint8。
复制代码
### 复合数据类型
1. 数组(array):固定长度的数据结构
1. go 语言中的数组实际用得比较少,因为被限制的太死了,无法动态增加参数,所以一般用切片来代替
2.
```Go
var nameList [3]string = [3]string{"测试", "代码", "功能"}
fmt.Println(nameList)
fmt.Println("下标为0的元素为:", nameList[0])
fmt.Println("下标为1的元素为:", nameList[1])
fmt.Println(len(nameList))
fmt.Println("最后一位元素为:", nameList[len(nameList)-1])
```
2. 切片(slice):可变长度的数据结构;其实就是数组
1. 切片的定义
1.
```Go
var sliceList1 []string = []string{}
var sliceList2 = make([]string, 0)
```
2. 追加元素是通过 append 方法实现
3.
```Go
// 切片,是由数组演变而来的,可以动态添加长度,resize,可以方便的操作数组中的元素
// 切片的声明方式: var 变量名 []类型 = 数组名[开始索引:结束索引]
// 切片的长度是由结束索引减去开始索引,如果结束索引为-1,则表示到数组末尾
// 切片的长度不能超过数组的长度,如果超过,则会自动截取到数组的长度
// 切片的长度不能为负数,如果为负数,则会自动变成0
var sliceList []string
sliceList = nameList[0:2] // 表示截取数组,并且返回新的数据
sliceList = append(sliceList, "测试2") // 追加元素到切片中
sliceList = append(sliceList, "测试3")
fmt.Println(sliceList)
fmt.Println(sliceList == nil) // 当切片长度为零的时候,条件成立
```
3. 哈希表(map):[键值对](https://www.php.cn/zt/49710.html "键值对")数据结构
1. map 的声明 有两种方式:一种是直接声明 var userMap map\[int\]string = map\[int\]{ 1: "测试代码", 2:"第二个测试代码" };还有个一个是使用 make 函数声明一个空的 map 对象,具体是 var Map = make(map\[string\]string)
2.
```Go
package main
import "fmt"
func main() {
var userMap map[int]string = map[int]string{
1: "测试代码",
2: "第二个测试代码",
3: "第三个测试代码",
}
// map 需要注意的点
// 当获取的下标数据不存在的时候,默认值是属性值的默认值,这里的 string 也就是空字符串
// 当真的想要看的时候,使用 fmt.Println("%#v\n", userMap[100]) 这样,就能看到打印的字符串
// 还有一种方法
fmt.Println("map 的第一个元素:", userMap[2])
value, ok := userMap[100]
fmt.Println("ok", ok)
fmt.Println("value", value)
// 删除值
delete(userMap, 2)
fmt.Println("删除后的 map:", userMap)
// 声明一个空的 map
var aMap = make(map[string]string)
// 不可行的写法 var aMap = map[string]string 这个时候,aMap 初始值是一个 nil ,所以不能set 值进去
aMap["name"] = "张三"
fmt.Println("aMap:", aMap)
}
```
4. 结构体(struct):自定义数据结构
1. 结构体其实就是对象,可以包含 属性和方法;Go 语言中没有类的概念,但是可以通过 结构体实现类,也就是面向对象
运算符
复制代码
### 算术运算符
1. 加法(+):将两个操作数相加
2. 减法(-):将两个操作数相减
3. 乘法(\*):将两个操作数相乘
4. 除法(/):将两个操作数相除
5. 取余(%):将两个操作数相除并返回余数
复制代码
### 关系运算符
1. 等于(==):比较两个操作数是否相等
2. 不等于(!=):比较两个操作数是否不相等
3. 大于(\>):比较两个操作数是否大于
4. 小于(
5. 大于等于(\>=):比较两个操作数是否大于或等于
6. 小于等于(\<=)
复制代码
### 逻辑运算符
1. 与(\&\&):如果两个操作数都为真,则返回真,否则返回假
2. 或(\|\|):如果两个操作数有一个为真,则返回真,否则返回假
3. 非(!):将操作数取反
复制代码
### 位运算符(实战比较少用)
1. 与(\&):将两个操作数的二进制位进行与运算
2. 或(\|):将两个操作数的二进制位进行或运算
3. 异或(\^):将两个操作数的二进制位进行异或运算
4. 左移(
5. 右移(\>\>):将操作数的二进制位向右移动指定位数
控制语句
复制代码
### **if 语句**
1.
```Go
if 条件 {
语句块
} else {
语句块
}
```
复制代码
### switch 语句
1.
```Go
switch 表达式 {
case 值1:
语句块
case 值2:
语句块
...
default:
语句块
}
```
复制代码
### for 语句
1.
1.
```Go
// 九九乘法表
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d * %d = %d\t", i, j, i*j)
}
fmt.Println()
}
```
函数
复制代码
### **函数关键字**
1. ****
```Go
func 函数名(参数列表) 返回值类型 {
函数体
}
```
还在更新中