Go最全golang基础教程(八)、切片(3),2024年最新BAT大厂Golang面试真题锦集干货整理

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!



slice容量:4,长度:2,值:[刘德华 黎明]
slice地址:0xc000084130


### 二、切片在内存中形式


![在这里插入图片描述](https://img-blog.csdnimg.cn/20190214155025565.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkxMDQ1Mw==,size_16,color_FFFFFF,t_70)  
 **总结:**  
 从上面可以看到


1. slice的确是一个引用类型
2. slice 从底层来说,其实就是一个数据结构(struct结构体)



type slice struct {
ptr *[2]int
len int
cap int
}


### 三、切片的使用


##### 1、切片的定义


1. **第一种方式**



> 
> 定义一个切片,然后让切片去引用一个已经创建好的数组,比如前面的案例就是这  
>  样的。
> 
> 
> 



slice :=arr[a🅱️c]


a:起始位置  
 b:截取数据的结束位置 默认到末端)  
 c:截取后的容量位置 默认到末端)  
 slice的len = b - a  
 slice的cap = c - a  
 底层数组: 为原数组的下标a到下标b(不包括)的所有元素


2. **第二种方式:**



> 
> 通过 make 来创建切片  
>  基本语法:var 切片名 []type = make([]type, len, [cap])
> 
> 
> 


**参数说明:**  
 type: 就是数据类型  
 len : 大小  
 cap :指定切片容量,可选, 如果你分配了 cap,则要求 cap>=len.



func main() {
slice :=make([]int,3,5)
slice[0] = 100
slice[1] = 200
slice[2] = 300
fmt.Printf(“slice容量:%d,长度:%d,值:%v\n”,cap(slice),len(slice),slice)
fmt.Printf(“slice地址:%p\n”,slice)
//slice[3] = 400 //runtime error: index out of range 报错
slice = append(slice, 400)
slice = append(slice, 500)
fmt.Printf(“slice容量:%d,长度:%d,值:%v\n”,cap(slice),len(slice),slice)
fmt.Printf(“slice地址:%p\n”,slice)
slice = append(slice, 600)
fmt.Printf(“slice容量:%d,长度:%d,值:%v\n”,cap(slice),len(slice),slice)
fmt.Printf(“slice地址:%p”,slice)
}



slice容量:5,长度:3,值:[100 200 300]
slice地址:0xc000016120
slice容量:5,长度:5,值:[100 200 300 400 500]
slice地址:0xc000016120
slice容量:10,长度:6,值:[100 200 300 400 500 600]
slice地址:0xc000074000


**总结:**  
 (1) 通过 make 方式创建切片可以指定切片的大小和容量  
 (2) 如果没有给切片的各个元素赋值,那么就会使用默认值[int , float=> 0 string =>”” bool =>  
 false]  
 (3) 通过 make 方式创建的切片对应的数组是由 make 底层维护,对外不可见,即只能通过 slice 去  
 访问各个元素


**与第一种方式的区别:**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190214160328632.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkxMDQ1Mw==,size_16,color_FFFFFF,t_70)


3. **第 3 种方式**





![img](https://img-blog.csdnimg.cn/img_convert/0a6ce3c75e872e0d36df000bc2e19a8c.png)
![img](https://img-blog.csdnimg.cn/img_convert/a0757f4508c59d039c209ee175596147.png)
![img](https://img-blog.csdnimg.cn/img_convert/4c412360b637173ce1f4707cbe7eef52.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值