1.切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
2.切片的使用和数组类似,遍历切片、访问切片的元素和求切片长度 len(slice)都一样。
3.切片的长度是可以变化的,因此切片是一个可以动态变化数组。
var 切片名 []类型
var a []int
var intArr [5]int = [5]int{1,3,4,7788,999}
slice := intArr[1:3]
fmt.Println("initArr=", intArr)
fmt.Println("slice的元素=", slice)
fmt.Println("slice的元素个数=", len(slice))
fmt.Println("slice的元素容量=", cap(slice))//切片的容量就可以动态变化
initArr= [1 3 4 7788 999]
slice的元素= [3 4]
slice的元素个数= 2
slice的元素容量= 4
切片的使用:
1.让切片去引用一个已经创建好的数组
var intArr [6]int = [6]int{1,3,4,7788,999,777}
slice := intArr[2:5]
2.通过make来创建数组
var 切片名 []type =make([]type,len,[cap])
var slice []float64 = make([]float64, 5, 10)
slice[1] = 10
slice[2] = 20
fmt.Println(slice)
fmt.Println(len(slice))
fmt.Println(cap(slice))
运行结果:
[0 10 20 0 0]
5
10
cap>len
3.定义一个切片,直接指定具体数组,使用原理类似make的方式
var slice []string = []string{"tim", "jack", "ma"}
fmt.Println(slice)
fmt.Println(len(slice))
fmt.Println(cap(slice))
运行结果:
[tim jack ma]
3
3
var arr [5]int = [...]int{10,20,30,40,50}
slice := arr[1:5]
fmt.Println(slice)
slice = append(slice, 11)
fmt.Println(slice)
slice1 := slice[1:2]
slice1[0] = 100
fmt.Println(slice1)
fmt.Println(slice)
切片可以继续切片,新的切片和旧的切片指向的是同一个空间,用 append 内置函数,可以对切片进行动态追加
ste := "hello@aaaa"
slice := ste[3:]
ste[0] = 'a'
fmt.Println(slice)
string 是不可变的,也就说不能通过 str[0] = 'z' 方式来修改字符串
如果需要修改字符串,可以先将 string -> []byte / 或者 []rune -> 修改 -> 重写转成 string
//str := "hello@aaaa"
//arr := []byte(str)
//arr[0] = 'q'
//str1 := string(arr)
//fmt.Println(str1)
str := "我门我问问"
arr := []rune(str)
arr[0] = '被'
str1 := string(arr)
fmt.Println(str1)
byte可以用来处理字符串和数字,[]rune可以用来处理汉字