golang学习总结-数组 切片代码总结
package basecode
/**
* golang 数组 切片 映射
* 数组是 切片和映射的底层
*
*/
import (
"fmt"
"reflect"
)
// 注意 java中的数字 是 int[] ar1 刚好反着来
var ar1 [3]string //指定数组长度
// 测试golang 数组功能
func ArrayTest() {
arrayAndSlice()
//arrayInit()
//sliceupTest()
//mapTest()
}
func arrayAndSlice() {
fmt.Println("\n\n golang 数组测试 ")
//创建并初始化好一个数组
//只要有初始值设置的就是数组
ar2 := [5]int{19, 22, 32, 43, 66}
ar2_1 := ar2 //数组复制
ar2_1[0] = 4445 //修改数据不影响原始数组
fmt.Println("数组内容:", ar2[0])
ar3 := [...]int{11, 33, 2}
ar4 := [5]int{1: 12, 4: 33}
//还可以创建指针数组即数组内的值都是指针
ar5 := [5]*int{0: new(int), 3: new(int)}
//使用* 来设置指针值
*ar5[0] = 165
fmt.Println("数组内容:", ar2[1], ar3[2], ar4[4], "*ar5[0]:", *ar5[0], ar5[0])
fmt.Println(reflect.TypeOf(ar4))
fmt.Println("\n\n golang 切片测试 ")
//切片之所以叫切片 就是因为底层数组切了一部分
var slice1 []int
slice2 := []int{1, 2, 3, 4, 5} //这也是一个切片
//使用make创建切片 第一个参数是切片类型 第二个参数是切片的长度 第三个参数是切片的容量
slice3 := make([]int, 4, 6)
//创建一个切片 切片长度和容量都是5
slice4 := make([]int, 5)
fmt.Println(reflect.TypeOf(slice1)) //输出[]int 只要没有初始值得就是切片
fmt.Println(reflect.TypeOf(slice2))
fmt.Println(reflect.TypeOf(slice3))
fmt.Println(reflect.TypeOf(slice4))
//golang 内置函数len 获取长度 cap 获取容量
fmt.Println("长度:", len(slice3), "容量", cap(slice3))
}
// 数组赋值
func arrayInit() {
ar1[0] = "yyyy~~~"
ar1[1] = "xxxxx~~~"
fmt.Println("ar1[0]: ", ar1[0])
fmt.Println(ar1) //数组打印是 [yyyy~~~ xxxxx~~~ ]
}
// 切片
// 切片类型java 中的list 可以自动扩容
// 内置函数 make创建 明显 切边优于数组
func sliceupTest() {
fmt.Println("\n\n golang 数组切片 ")
//使用内置函数make创建一个切片 第一个参数是切片数组类型 第二个是切片长度
ch := make([]string, 4)
ch[0] = "jk0"
ch[1] = "jk1"
ch[2] = "jk2"
ch[3] = "jk3"
fmt.Println("ch[2] : ", ch[2])
//使用内置append函数扩容切片,数据加载数组的尾部,按参数顺序加入到尾部
//ch = append(ch,"appjk4")
ch = append(ch, "appjk4", "apJK5")
fmt.Println("ch[4] : ", ch[4])
//使用range循环 切片
fmt.Println("\n")
for j, n := range ch {
fmt.Println("ch[", j, "] 数组值AB:", n)
}
//使用:数字来获取子切片
//
fmt.Println("\n 获取子切片")
chp := ch[:3] //表示从切片下标3向前 注意不包括3
fmt.Println(chp)
fmt.Println(ch[2:]) //表示从切片下标2向后 包括2
//
fmt.Println("\n 删除切片后方案1-------")
ch = append(ch[:3], ch[4:]...) //注意需要加...
for j, n := range ch {
fmt.Println("ch[", j, "] 数组值:", n)
}
}