GO slice切片
package main import "fmt" /* 切片 切片是引用类型,所以当实参传递给func 在func中更改切片 会影响切片的实际值 */ func main() { //数组 var intArr = [...]int{11, 22, 33, 44, 55} fmt.Println(intArr) //定义切片 方式一 定义一个切片来引用创建好的数组 //intArr[1:3]表示引用intArr数组,引用intArr的起始下标为1,结束下标为3(但是不包括3) 以后想获取数组某个值到某个值是也可以用arr[:] slice := intArr[1:3] //这里切片引用了intArr数组 所以在下面改变切片的值 intArr的值也会改变 slice[0] = 555 fmt.Println(intArr) fmt.Println("切片的值是", slice) fmt.Println("切片的容量是", cap(slice)) //容量一般是长度的两倍但是不准这个是根据长度来动态增加的 //方式二 slice1 := make([]float64, 5, 10) //切片类型,切片长度,切片容量:这个容量参数是可选的可以不填 fmt.Println(slice1) //方式三 slice2 := []string{"字", "富", "串"} fmt.Println(slice2) fmt.Println("长度是", len(slice2)) //3 fmt.Println("容量是", cap(slice2)) //3 //用内置函数append,对切片进行动态添加 若果切片容量不够可以自动增加容量 slice3 := []string{"第一", "第二"} slice3 = append(slice3, "新加的") fmt.Println(slice3) //也可以追加切片 ...这三个点必须带 slice3 = append(slice3, slice2...) fmt.Println(slice3) //切片的拷贝 拷贝如果容量不够不会报错 如果长度是一那就从另一个切片中只拷贝一个 slice4 := []int{1, 2, 3} slice5 := make([]int, 10) copy(slice5, slice4) //将slice4拷贝给slice5 //copy()两个的参数类型必须都是切片 fmt.Println(slice4) fmt.Println(slice5) /* string和slice string可以进行切片处理 string底层是byte数组 所以可以切片 */ str := "heelo@hahaha" slice6 := str[6:] fmt.Println(slice6) //修改字符串中某个值 slice7 := []byte(str) //将字符串转为byte类型切片 slice7[0] = 'z' //修改某个值 str = string(slice7) //再将byte类型的切片转为string,这就修改成功了 但是这只能修改英文和数组不能修改汉字,英文byte是1字节一个汉字是3个字节 fmt.Println(str) //修改为汉字 slice8 := []rune(str) //将字符串转为rune类型切片 slice8[0] = '北' //修改某个值 str = string(slice8) //应为rune切片是按照字符处理所以兼容汉字 fmt.Println(str) //斐波那契数列 var length int fmt.Println("输入斐波那契数:") fmt.Scanln(&length) fbnFun := fbn(length) fmt.Println(fbnFun) } func fbn(n int) []int { var slice9 = make([]int, n) for i := 0; i < n; i++ { if i == 0 || i == 1 { slice9[i] = 1 continue } slice9[i] = slice9[i-1] + slice9[i-2] } return slice9 }