在Go语言中,引用类型(Reference Types)指的是指针类型、切片(Slice)、映射(Map)、通道(Channel)和函数类型。这些类型都是引用类型的示例,它们与基本类型(如整数、浮点数和布尔值)的主要区别在于它们是通过引用来存储值的,而不是直接存储值。
1.指针类型(Pointer):
指针是一种特殊的数据类型,它存储了一个变量的内存地址。通过使用指针,可以在不直接访问变量的情况下,间接地访问和修改该变量的值。
代码示例:
package main
import "fmt"
func main() { var num int = 42 var numPtr *int = &num // 创建指向 num 的指针
fmt.Println("num:", num) fmt.Println("numPtr:", *numPtr) // 访问指针指向的值
*numPtr = 99 // 通过指针修改变量的值 fmt.Println("num:", num) }
输出结果:
num: 42 numPtr: 42 num: 99
2.切片(Slice):
切片是对数组的抽象,它提供了一种动态长度的、可变长的序列类型。切片由底层的数组和三个属性组成:长度、容量和指向底层数组的指针。
代码示例:
package main
import "fmt"
func main() { var slice1 []int = []int{1, 2, 3, 4, 5} var slice2 []int = make([]int, 3, 5) // len=3, cap=5 slice2[0] = 10 slice2[1] = 20 slice2[2] = 30
fmt.Println("slice1:", slice1) // 输出: [1 2 3 4 5] fmt.Println("slice2:", slice2) // 输出: [10 20 30] }