数组:
定义:
方式一:
arr1 := [...]int{1,2,3}
方式二: arr2 := [3]int{1,2,3}
方式三: var arr3 [3]int
遍历:
//遍历数组
	for k, v :=range arr3{
		fmt.Println("key:%v,value:$v",k,v)
	}
值类型和引用类型:
1.基本数据类型 和 数组 都为值类型
2.改变副本值会影响原来值的为引用数据类型 指向的为同一个内存地址 。包含(切片)
定义二维数组:
    //定义二维数组
	arr := [3][2]string{
		{"北京","上海"},
		{"武汉","长沙"},
		{"南昌","成都"},
	}
	//遍历
	for _,v1 :=range arr{
		for _,v2 := range v1 {
			println(v2)
		}
	}
	        
切片
切片的本质就是对底层数组的封装 ,类似可变长度数组 声明未复制 默认值为 nil
len(s)获取长度, cap(s)获取容量
长度:所含元素个数
容量:从第一个元素开始数,到底层数组末尾的个数
append()为切片动态添加元素,长度和容量同时会增加
合并切片
        sliceA := []string{"张三丰","张学友","张国荣"}
	sliceB := []string{"刘德华","谢霆锋","阿三"}
	sliceA = append(sliceA,sliceB...)
	fmt.Println(sliceA)
copy()复制切片 防止改变副本而改变本身
        sliceA := []string{"张三丰","张学友","张国荣"}
	sliceB := make([]string,4,4)
	//sliceC := []string{"刘德华","谢霆锋","阿三"}
	//sliceA = append(sliceA,sliceB...,sliceC...)
	copy(sliceB,sliceA) //把sliceA拷贝给sliceB中
	fmt.Println(sliceB) 
删除切片元素
用append方法删除
字符串 切片的互换
//字符串转切片 s1 := "你好 golang" runeStr := []rune(s1) runeStr[0] = ‘您‘ fmt.Println(string(runeStr))
原文:https://www.cnblogs.com/finnlee/p/14103354.html