这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
Go语言的数据类型有很多,数字类型、布尔类型、字符串类型、数组类型、切片类型,指针类型、结构体类型、Map类型等等。
整数
整数是一种比较常见的数据类型,支持8, 16, 32, 64位的整数和无符号整数,还有 int、uint、uintptr 类型。在实际的使用中,经常会简单实用 int 类型来存储整数,对于特殊的场景可以灵活使用各种大小的整数类型。
| 类型 | 描述 |
|---|---|
| int8 | 有符号 8位整型 (-128 到 127) |
| int16 | 有符号 16位整型 (-32768 到 32767) |
| int32 | 有符号 32位整型 (-2147483648 到 2147483647) |
| int64 | 有符号 64位整型 (-9223372036854775808 到 9223372036854775807) |
| uint8 | 无符号 8位整型 (0 到 255) |
| uint16 | 无符号 16位整型 (0 到 65535) |
| uint32 | 无符号 32位整型 (0 到 4294967295) |
| uint64 | 无符号 64位整型 (0 到 18446744073709551615) |
| int | 32位操作系统上就是int32,64位操作系统上就是int64 |
| uint | 32位操作系统上就是uint32,64位操作系统上就是uint64 |
| uintptr | 无符号整型,用于存放一个指针 |
浮点数
浮点数类型一共支持两种:float32 和 float64 。这两种浮点数都遵循 IEEE 754 标准。
| 类型 | 描述 |
|---|---|
| float32 | 单精度浮点数,最大数值 3.4e38,最小数值 1.4e-45 |
| float64 | 双精度浮点数,最大数值 1.8e308,最小数值 4.9e-324 |
参考示例:取最大值
var floatNumber float32 = math.MaxFloat32
var doubleNumber float64 = math.MaxFloat64
数组
在Go语言中,数组是一个定长的数据结构,在实际使用中比较少的, 使用比较多的是叫做切片的数据类型。
- 直接通过
var关键字声明一个数组 - 通过
:=声明并定义一个数组 - 数组支持声明多维数组
var a [5]int // var 关键字声明数组
b := []int {1, 2, 3, 4, 5} // 预先知道值的数组
c := [5][5]int // 多维数组
// 一维数组
a[4] = 100
fmt.Println("Array's value of index of 2 is ", a[2])
fmt.Println("Array's length is ", len(a))
// 多维数组
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
c[i][j] = i + j
}
}
fmt.Println("Two dimension array: ", c)
切片
切片在Go语言中是非常非常重要的数据类型,数组由于其特性,数组的大小是有限的,因此有一个灵活确定大小的数据类型就很方便,切片就可以充当这样的数据类型,切片的操作主要有:
- 创建切片:
make([]string, 3) - 使用切片:
slice[1] = 1 - 切片值的追加:
newSlice = append(slice, "1", "2") - 切片的复制:
copy(src, dest) - 切片操作:
s[2:5]
// 创建一个切片
s := make([]string, 3)
// 使用切片
s[0] = "a"
s[1], s[2] = "b", "c"
fmt.Println("slice s get index 2: ", s[2])
fmt.Println("slice s length is ", len(s))
// 切片值追加
s = append(s, "d", "e", "f")
// 切片的复制
c := make([]string, len(s))
copy(c, s)
// 切片操作
fmt.Println("c[2:5] = ", c[2:5])
map
map 可以用于存储键值对类型的数据。map 在程序的使用非常普遍,map的操作通常包含:
- 创建一个
map:make(map[string]int)或者 直接创建 - 为
map增加/修改键值对:m["one"] = 1增加和修改一个键值对的语法是完全一致的 - 获取一个键值对:
val, ok := m["one"]获取一个键值对的时候,还会接收到一个参数ok用于判断是否存在这个键值对。 - 删除一个键值对:
delete(map, key)删除键值对需要使用map和对应的值直接就可以对他进行删除
// 创建一个 map
m := make(map[string]int) // 通过 make() 创建
m1 := map[string]int {"one":1,"two": 2} // 直接根据值创建
// 新增或者修改键值对
m["one"] = 1
m["one"] = 1001
// 获取键值对
val, ok := m["one"]
// 删除键值对
delete(m1, "one")
遍历工具:range
range 搭配循环使用可以很方便的遍历例如数组、map、切片这样的数据类型的数据。
// 数组 / 切片
nums := []int {1, 2, 3, 4}
for i, val := range nums {
fmt.Println("nums[", i, "] = ", val)
}
// map
for k, v := range m {
fmt.Println("m[\"", k, "\"] = ", v)
}
- 对于数组的数据类型来说,
range返回两个数据:下标和值 - 对于
map的数据类型来说,range返回两个数据:键和值 map数据类型,每次遍历的结果都是随机的