Go 语言入门指南(2):基础语法和常用特性解析| 青训营

58 阅读2分钟

六.切片

go语言中一般很少用数组,用切片更方便一些

切片可以任意更改长度

定义切片

var slice1 []type = make([]T, length, capacity)

切片初始化

func main(){

	slice := make([]int, 4, 9)
	//slice = [] int{1,2,3}
	fmt.Println(len(slice))
	fmt.Println(cap(slice))
}

切片截取

func main(){

	slice := make([]int, 4, 9)
	//slice = [] int{1,2,3}
	fmt.Println(len(slice))
	fmt.Println(cap(slice))
}

举例

	s := make([]string, 3) //创建一个切片 初始长度为3
	s[0] = "a"
	s[1] = "b"
	s[2] = "c"
	s = append(s, "d") //数组不能用这个方法
	fmt.Println(s) // [a b 3 d] 

append和copy方法

s = append(s, “a”)还需要在重新给s赋值呢,虽然切片可以动态变长,其实切片底层是维护了一个数组的,也就是说他初始上就是个数组,只不过有一定大小,如果你append添加元素没有超过数组,那没事,但是超过数组大小,他就会重新弄一个更大的数组然后把值拷贝进去,最后把地址返回出来,所以你得让他重新等于s。

append

func main() {
	str := [] int{1,2,3}
	str1 := append(str, 3)
	fmt.Println(len(str), cap(str))
	fmt.Println(len(str1), cap(str1))
	fmt.Println(str1, str)
}


copy

cap方法查看其底层数组大小 , len方法是真实元素个数
	var s []string
	s = append(s, "a")
	s = append(s, "b")
	s = append(s, "c")
	fmt.Println(s)
	fmt.Println(cap(s)) // 4 
	fmt.Println(len(s)) // 3

切片遍历 和python十分相似

func main() {
	str := [] int{1,2,3}
	for index, value := range str{
		fmt.Println(index, value)
	}
}

七.MAP

定义MAP

var my_map map[string]string
my_map = make(map[string]string)

使用Map

my_map = make(map[string]string)
my_map["name"] = "jack"
my_map["age"] = "20"
my_map["address"] = "西安"

遍历MAP

	for key := range my_map{
		fmt.Println(key, my_map[key])
	}

删除MAP中的元素

delete(my_map, "name1")

八.range

对于一个 slice(切片) 或者一个 map 的话,我们可以用 range 来快速遍历,这样的代码能够更加简洁。 range 遍历的时候,对于数组会返回两个值,第一个是索引,第二个是对应位置的值。如果不需要索引,可以用下划线来忽略。

	nums := []int{2, 3, 4}
	sum := 0
	for i, num := range nums { //返回数组的 下标 和值
		sum += num
		if num == 2 {
			fmt.Println("index:", i, "num:", num) // index: 0 num: 2
		}	
	}
	fmt.Println(sum) // 9
	m := map[string]string{"a": "A", "b": "B"}
	for k, v := range m {  //返回key和value
		fmt.Println(k, v) // a A; b B
	}
	for k := range m {//返回key
		fmt.Println("key", k) // key a; key b
	}