零基础 go - 15(值类型和引用类型)

0 阅读1分钟

一、Go 语言中的值类型和引用类型

  • 值类型:基本数据类型(如 int系列、float系列、bool、string)和数组、结构体(struct)

image.png

  • 引用类型:切片(slice)、映射(map)、通道(channel)、接口(interface)和函数(function)。

image.png

二、值类型和引用类型的区别

  • 值类型:当你将一个值类型赋值给另一个变量时,会创建一个新的副本,两个变量互不影响。

  • 引用类型:当你将一个引用类型赋值给另一个变量时,两个变量指向同一个底层数据结构,对其中一个变量的修改会影响另一个变量。

三、值类型和引用类型在内存中的表现

  • 值类型:直接存储数据值,通常分配在栈上。(并不是绝对的,因为 go 语言的逃逸机制可能会改变这一行为)

  • 引用类型:存储一个指向底层数据结构的指针,指针指向的空间才是真正存储的数据。 且该数据通常分配在堆上。当没有变量引用这个地址时,就会被垃圾回收机制回收。

四、内存中栈区和堆区的区别:

  • 栈区:存储函数调用时的局部变量和参数,具有后进先出(LIFO)的特点,分配和回收速度快,但空间较小。

  • 堆区:用于动态分配内存,大小不固定,分配和回收相对较慢,但空间较大。

image.png