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
}

  

posted @ 2021-05-17 21:21  不吃肉的羊  阅读(30)  评论(0编辑  收藏  举报