Go-slice

切片

1.定义一个切片然后应用一个定义好的数组。

	var intarr [5]int = [...]int{1, 2, 3, 4, 5}
	//切片是引用类型,长度是动态的,其他与数组一样
	//左闭右开,表示取数组intarr下标1到3(不包含3)
	a := intarr[1:3]

2.make创建

1)make创建可以指定切片的大小,容量

2)没有给各元素赋值,那么就是默认值

3)创建的底层数组,对外不可见,只能通过slice访问

	//2.make  var 切片名 []type=make([]type,len,[cap]) cap>=len
	//                    数据类型          长度 容量可选

	var s1 []int = make([]int, 4, 10)

	s1[20] = 20
	//3.定义一个切片,直接指定具体的数组,原理类似make
	var strslice []string = []string{"jin", "wei", "chang"}
	fmt.Println(strslice)

4.切整个数组

//左边为空表示从头开始,右边为空表示到底
var slice=arr[:]

5.切片定义完后,要引用到一个数组或make一个空数组才能使用

6.切片可再切

	var arr1 [5]int = [...]int{10, 20, 30, 40, 50}
	s := arr1[1:4]  //20,30,40
	s1:=s[1:2]  //30

7append()

向切片中追加数据,使用append函数,原理是底层重新创建一个数组,切片再次引用过去。

	var slice3 []int = []int{100, 200, 300}
	slice3 = append(slice3, 400, 500, 600)
	//只能追加切片(切片后的3个点不能少),不能追加数组,
	slice3 = append(slice3, slice3...)
	fmt.Println("slice3", slice3)

8.copy

1)2个切片才能使用copy

2)2者空间独立,不相互影响

3)当S2定义长度小于3时,会将S1按下标顺序依次取出放入S2,如果S2长度为1,那么就只能放入12

	//将S1的3个元素复制到S2,如要2个切片完全一样,就将s2定义长度为3
    var s1 []int = []int{12, 13, 14}
	var s2 = make([]int, 5)
	copy(s2, s1)
	fmt.Println(s1) //[12 13 14]
	fmt.Println(s2) //[12 13 14 0 0]

9 string是个引用类型,底层是个byte数组,也能切片

string不能用切片直接修改,要先转换成byte切片,再修改,然后再转换回string,

string中只能是字母和数字,不能有中文,会出现乱码

	str := "abc@jinwei"
    s2 := []byte(str)
	s2[0] = 'p'
	str = string(s2)
	fmt.Println(str) //pbc@jinwei

转换为[]rune,按字符处理,兼容汉字

	str1 := "天龙八部"
	s3 := []rune(str1)
	s3[0] = 'p'
	str1 = string(s3)
	fmt.Println(str1)//p龙八部

斐波那契数列

func main() {
	ss := fbn(99)s
	fmt.Println(ss)
}

func fbn(n int) []uint64 {
	var fbnslice = make([]uint64, n)
	fbnslice[0] = 1
	fbnslice[1] = 1

	for i := 2; i < n; i++ {
		fbnslice[i] = fbnslice[i-1] + fbnslice[i-2]
	}
	return fbnslice

}

posted @ 2020-12-18 13:29  JinweiChang  阅读(61)  评论(0编辑  收藏  举报