Golang基本用法(二)

go:数组,切片,map,列表

Posted by Hzy on November 12, 2019

go中数组,切片,映射,列表的使用

1 数组

数组是内存中一段固定大小连续的区域。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import "fmt"

func main() {
	//定义数组
	var arr = [3]string{}//定义一个长度为3的数组
	var arr1 = [3]string{"1","2","3"}//定义一个长度为3的数组并赋值,数量不能超过定义的数组长度
	var arr2 = [...]string{"1","2","3","4"}//使用... 编译器对自动确定长度
	fmt.Println(arr) //[]
	fmt.Println(arr1)//[1 2 3]
	fmt.Println(arr2)//[1 2 3 4]

    //遍历数组
	for k,v :=range arr2{
		fmt.Println(k,v)
	}
}

2 切片

切片类似于数组,区别是可以动态的分配数组的长度

2.1 声明切片
1
2
3
4
5
6
7
8
9
10
11
//切片
	var arr = [3]int{1, 2, 3} //先定义一个数组
	var slice = arr[:]        //对数组进行切片
	var newSlice []int     // 声明一个新的切片
	fmt.Println(newSlice == nil) //true
	//使用make来生成切片
	newSlice1 := make([]int,2,10) //2:为这个切片分配2个元素的数量,10:提前分配10个元素数量,当长度超过10个时,在进行新的分配
	fmt.Println(newSlice1) //[0,0]
	fmt.Printf("%T %T\n", arr, slice)         // [3]int,[]int 前者是数组类型,后者是切片类型
	fmt.Println(arr[0:1], arr[0:2], arr[1:3]) // 对数组指定范围进行分割
	fmt.Println(arr[0:0])                     //重置切片
2.2 切片添加元素
1
2
3
4
// 切片添加元素
	newSlice = append(newSlice,1) //newSlice [1]
	newSlice = append(newSlice,2) //newSlice [1 2]
	newSlice = append(newSlice,3) // newSlice [1 2 3]
2.3 切片的拷贝
1
2
3
4
5
6
7
8
//切片的拷贝
	//t := newSlice //这样只是单纯引用,只是把变量newSlice换成了t,地址还是一样的
	//t[0] =3 //[3 2 3]
	//fmt.Println(t)
	copySlice :=make([]int,3)
	copy(copySlice,newSlice)
	newSlice[0] = 3
	fmt.Println(newSlice,copySlice)
2.4 切片删除元素
1
2
3
4
5
//切片删除元素
	//指定出要删除的范围,然后拼接,达到删除的效果
	idx :=1
	copySlice = append(copySlice[:idx],copySlice[idx+1:]...)
	fmt.Println(copySlice) //[1 3] 索引1上的2被删除了

3 映射(map)

映射类似于python的字典

3.1 声明map
1
2
3
4
5
6
7
8
//创建map ,,类似于python中的字典
	m := make(map[string]string) //使用make创建map
	m1 := map[string]string{ //创建并赋值
		"idx1":"1",
		"idx2":"2",
	}
	fmt.Println(m)
	fmt.Println(m1)
3.2 删除键值对
1
2
3
//使用delete删除键值对
	delete(m1,"idx1") //删除键为"idx1"
	fmt.Println(m1)

4 列表

4.1 列表创建,插入,遍历,删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//列表
	l := list.New() //初始化代码
	handle :=l.PushFront("start") //列表前插入元素
	l.InsertAfter("middle",handle)  //指定一个句柄,在句柄后插入元素
	l.PushBack("end")//列表后插入元素
	//遍历列表
	for i:=l.Front();i!=nil;i=i.Next(){
		fmt.Println(i.Value)
	}
	l.Remove(handle)//删除列表中的元素
	//遍历列表
	for i:=l.Front();i!=nil;i=i.Next(){
		fmt.Println(i.Value)
	}