Go语言中的切片

package main

import "fmt"

func main() {

    /*空切片*/

    //var slice []int

    //slice := []int

    //slice := make([]int, 0)

    //slice := []int {}

    //创建切片

    //slice:=make([]string, 5)

    slice := []int{0, 1, 2, 3, 4}

    for i := 0; i < len(slice); i++ {

        fmt.Println("我是原切片:", slice[i], &slice[i], "我的长度是:", len(slice), "我的容量是:", cap(slice))

    }

    //newSlice := slice[startIndex:endIndex]

    //newSlice[i:j] 长度为j-i,容量为len(slice) - i

    newSlice := slice[1:5]

    for i := 0; i < len(newSlice); i++ {

        fmt.Println("我是新切片:", newSlice[i], &newSlice[i], "我的长度是:", len(newSlice), "我的容量是:", cap(newSlice))

    }

    /*共享原切的数组元素与内存地址*/

    newSlice2 := slice[1:3]

    for i := 0; i < len(newSlice2); i++ {

        fmt.Println("我是新切片2:", newSlice2[i], &newSlice[i], "我的长度是:", len(newSlice2), "我的容量是:", cap(newSlice2))

    }

    /*原切某下标元素发生变化时,新切片也会跟着变化*/

    slice[1] = 100

    fmt.Println(slice, newSlice, newSlice2)

    //以上的两个切片在切割原切片时,容量均小于原切片大小

    //从下标为0的位置开始切,一直到原切片末尾

    newSlice3 := slice[0:]

    fmt.Println("我是新切片3:", newSlice3, "我的长度是:", len(newSlice3), "我的容量是:", cap(newSlice3))

    //若在原切片上追加一个新的元素,那么新切片的容量和长度又会如何?

    //在slice上追加了一个元素为30的值

    newSlice4 := append(slice, 30)

    fmt.Println("我是新切片4:", newSlice4, "我的长度是:", len(newSlice4), "我的容量是:", cap(newSlice4), "我的首地址是:", &newSlice4[0])

    //那么修改newSlice4的下标为1元素的值其他切片会受到影响吗?

    //答案为:不会,因为在append()后,会分配一个原容量长度两倍且有属于自己的新内存空间给新切片

    //将newSlice4[1]的值改为了1,输出结果[0 1 2 3 4 30]

    newSlice4[1] = 1

    fmt.Println("我是新切片4:", newSlice4, "我是原切片 slice:", slice, "我是newSlice:", newSlice, "我是newSlice2:", newSlice2, "我是newSlice3:", newSlice3)

}

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。