Golang(八)[引用类型]

引用类型包括指针(point)、切片(slice)、字典(map)、函数(func)、通道(channel),虽然数据种类很多,但它们都是对程序中一个变量或状态的间接引用。这意味着对任一引用类型数据的修改都会影响所有该引用的拷贝。

1.指针(point)

2.切片(slice)

Golang的Slice源码位于src/runtime/slice.go

src/runtime/slice.go

1.简介

  • Slice(切片)代表变长的序列,序列中每个元素都有相同的类型。一个slice类型一般写作[]T,其中T代表slice中元素的类型;slice的语法和数组很像,只是没有固定长度而已。

  • Go 语言切片是对数组的抽象

  • 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(和数组不一样)

  • slice是一个轻量级的数据结构,提供了访问数组子序列(或者全部)元素的功能,而且slice的底层确实引用一个数组对象

  • slice由三个部分构成:指针、长度和容量指针指向第一个slice元素对应的底层数组元素的地址slice的第一个元素并不一定就是数组的第一个元素

  • 长度对应slice中元素的数目;长度不能超过容量

  • 容量一般是从slice的开始位置到底层数据的结尾位置。内置的len和cap函数分别返回slice的长度和容量。

      长度是slice索引操作的上界
      容量是slice分割操作的上界
    
  • 多个slice之间可以共享底层的数据,并且引用的数组部分区间可能重叠。

  • slice不会实际复制一份数据,它只是创建一个新的数据结构,包含了另外的一个指针,一个长度和一个容量数据。 如同分割一个字符串,分割数组也不涉及复制操作:它只是新建了一个结构来放置一个不同的指针,长度和容量。

  • 切片提供了计算容量的函数 cap() 可以测量切片最长可以达到多少:它等于切片的长度 + 数组除切片之外的长度。

  • 优点

因为切片是引用,所以它们不需要使用额外的内存并且比使用数组更有效率,所以在 Go 代码中切片比
数组更常用。

  • 注意

绝对不要用指针指向 slice,切片本身已经是一个引用类型,所以它本身就是一个指针!
声明切片的格式是: var identifier []type(不需要说明长度)。
一个切片在未初始化之前默认为 nil,长度为 0。
go语言源码对slice的定义

2.定义

2.1.方式1

var slice []data_type 
释义:
slice:切片名称
data_type:切片的数据类型
注意:
此时切片中的[]是空的,切片的长度和容量均为0
func main() {
   
	var slice []int
	fmt.Println(slice)
	fmt.Println("len = ",len(slice),",cap = ",cap(slice))
}

此时切片中的[]是空的,切片的长度和容量均为0

2.2.方式2

slice := []data_type{
   }
释义:
slice:切片名称
data_type:切片的数据类型
注意:
此时切片中的[]是空的,切片的长度和容量均为0
func main() {
   
	slice := []int{
   }
	fmt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值