一、数组

1
2
3
4
5
var arr1 [5]int //定义数组
arr2 := [3]int{1,3,5}//定义并初始化
arr3 := [...]int{1,3,4,5}//定义并初始化
var grid [4][5]int//二维数组 四行五列
[]int 不加长度是一个切片slice
遍历数组
1
2
3
for _,v := range arr3{
fmt.Println(v)
}
  • 可以使用关键字 range 进行遍历
  • 可通过 省略变量(任何地方都可通过 省略变量)
  • 如果只要 i ,可写成 for i := range arrs

为什么使用 range 进行遍历:

  • 意义明确、美观
  • 相对于其他语言获取值比较便利
数组是值类型
  • 函数调用时,是拷贝数组
  • [3]int 和 [5]int 是不同类型
  • 在 golang 中一般不使用数组,而是切片

二、切片 Slice

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
arr := [...]int{0,1,2,3,4,5,6,7,8}//数组
//切片
s1 arr[2:6] = [2 3 4 5]
s2 arr[:6] = [0 1 2 3 4 5]
s3 arr[2:] = [2 3 4 5 6 7 8]
s4 arr[:] = [0 1 2 3 4 5 6 7 8]
len(s1) = 4
cap(s1) = 6
//update
s1[0] = 10
print arr = [0,1,10,3,4,5,6,7,8]
// extending
s5 = s1[3:5] ?
s5 = [5,6] //由于向后扩展
// add
s6 = append(s1,10)//修改底层数组值
s7 = append(s6,11)
s8 = append(s7,12)
s9 = append(s8,13)//底层数组重新分配
print arr = [0,1,10,3,4,5,10,11,12]
  • slice 本身是没有数据的,是对底层数组的一种视图
slice 的扩展
  • slice 可以向后扩展,不可以向前扩展

  • s[i] 不可以超越 len(s),向后扩展不可以超越底层数组 cap(s)

slice 的实现

ptr、len、cap

slice 添加元素
  • 添加元素时如果超越 cap,系统会重新分配更大的底层数组
  • 由于值传递的关系,必须接收 append 的返回值
slice 的创建
  • 内建函数 make([]int ,16,32) len -16 cap - 32
slice copy 、delete、
  • copy(s1,s2)
  • delete 直接用 slice 或 append

三、Map

1
2
3
4
5
6
7
8
9
10
11
//创建 map
m1 := map[string]string{
"name":"Atu",
"age":"30",
"height":"170cm",
"weight":"60kg",
}
m2 := make(map[string]int) //空 map
var m3 map[string]int //空 map
map 遍历、取值、删除
1
2
3
4
5
6
7
8
9
10
11
12
13
// 遍历 map
for k,v := range m{
fmt.Println(k,v)
}
//取值 判断 key 存不存在
if courseName,ok := m["course"];ok{
fmt.Println(courseName)
}else {
fmt.Println("key does not exist")
}
// delete
delete(m,"name")
  • k 和 v 可以 _ 省略
  • 无序(hashmap)
  • 使用 len 获取个数
  • 获取值 m[“key”]
  • key 不存在时,获取 value 类型的初始值
  • 用 value,ok := m[key] 来判断是否存在 key
map 的key
  • map 使用哈希表,必须可以比较相等
  • 出来 slice、map、function 的内建类型都可以作为 key
  • Struct 类型不包含上述字段,也可以作为 key

四、字符和字符串 string

  • 使用 rune 相当于 go 的 char
  • 使用 utf8.RuneCountInString 活得字符数量
  • 使用 len 获得字节长度
  • 使用 [] byte 获得字节
  • 使用 range 遍历 (pos ,rune) 对
  • Fields,Split,Join
  • Contains,Index
  • ToLower,ToUpper
  • Trim,TrimRight,TrimLeft