go-slice

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可以用来处理汉字

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!