③ 数组和切片

本文即将看到:
⚬ --- 数组
⚬ --- 切片
⚬ --- append和copy

一、数组
1> 定义和使用

    ● var name [size]type 
    ● var name [...]type //自动填充长度
    ● var name = [size]type{ } //初始化并定义
    ● name := [...]tpye{}

2> 数组的长度和遍历

    ● len(数组名) //获取数组长度
    ● for...range //遍历 也可以用for 
        for 下标,值 := range 数组名{ }

3> 多维数组

    ● name := [...]...[size]tpye{}

4> 值类型

Go中的数组是值类型,而不是引用类型。这意味着当它们被分配给一个新变量时,将把原始数组的副本分配给新变量。如果对新变量进行了更改,则不会在原始数组中反映。`

二、切片 (Slice)
1> 切片涵义

● 切片是一种方便、灵活且强大的包装器。切片本身没有任何数据。它们只是对现有数组的引用。
● 切片与数组相比,不需要设定长度,在[]中不用设定值,相对来说比较自由
● 从概念上面来说slice像一个结构体,这个结构体包含了三个元素:
     指针,指向数组中slice指定的开始位置
     长度,即slice的长度
     最大长度,也就是slice开始位置到数组的最后位置的长度

2> 切片的语法

定义切片:
var identifier(标识符) []type  //切片不需要说明长度。
使用make()函数来创建切片:
        var slice []type = make([]type,len)
        slice := make([]type, len)  //简写

创建新切片: 
        slice = slice[start:end]

3> 修改切片

● slice没有自己的任何数据。它只是底层数组的一个表示。对slice所做的任何修改都将反映在底层数组中。
● 当多个片共享相同的底层数组时,每个元素所做的更改将在数组中反映出来。

4> 切片的长度和容量

    len() //长度
    cap() // 容量
    一个切片在未初始化之前默认为 nil,长度为 0

三、append和copy
1>

● append 向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
● copy 函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数

2>

 var num []int
 nums := append(num, 0) //允许追加空切片
 nums = append(nums, 1) //向切片添加一个元素
 nums = append(nums, 2,3,4) //同时添加多个元素

 num1 := make([]int, len(nums), (cap(nums))*2) //创建切片 num1 是之前切片的两倍容量
 copy(num1,nums)// 拷贝 nums 的内容到 num1
 //num1与nums两者不存在联系,nums发生变化时,num1是不会随着变化的。也就是说copy方法是不会建立两个切片的 
   联系的
posted @ 2020-04-19 17:04  Gonfei  阅读(156)  评论(0)    收藏  举报