理解go语言的核心和普通引用类型
1 简介
在 Go(Golang)中,普通类型/值的赋值规则以及核心类型的定义是语言设计的重要组成部分,理解这部分有助于写出更高效和健壮的 Go 代码。
2 Go 中普通类型/值的赋值规则
Go 是 静态强类型语言,赋值行为主要遵循值语义,即 默认是值拷贝。
✅ 特点如下:
类型分类 赋值行为
值类型(value types) 赋值时会复制整个值(即值拷贝)
引用类型(reference types) 赋值时复制的是“引用”(指针、结构体的地址)
- 值类型
值类型赋值是 拷贝值本身,两个变量不会互相影响:
a := 10
b := a
b = 20
fmt.Println(a) // 输出 10,不受 b 修改影响
常见的值类型有:
基本类型(int、float64、bool、string)
数组(array)
结构体(struct)
- 引用类型
引用类型赋值时是 共享底层数据结构,修改一处,另一处可能受影响:
s1 := []int{1, 2, 3}
s2 := s1
s2[0] = 100
fmt.Println(s1[0]) // 输出 100,s1 也被修改
常见的引用类型有:
切片(slice)
映射(map)
通道(chan)
接口(interface)
函数(func)
指针(pointer)
3 Go 的核心类型有哪些
Go 的 核心类型(或称内建类型、基础类型) 是 Go 编译器直接支持的类型,通常定义在 builtin 包中。
✅ 常见核心类型:
布尔型:
bool
数值型:
整型:int, int8, int16, int32, int64
无符号整型:uint, uint8, uint16, uint32, uint64, uintptr
浮点型:float32, float64
复数型:complex64, complex128
字符串:
string
派生/组合类型(也是内建):
array, struct, pointer, function, interface, slice, map, channel
4 如何定义 “核心类型” 和 “普通类型”
分类 定义标准
核心类型 是由 Go 语言预定义,直接支持的类型,通常在 builtin 包中,编译器内置
普通类型 是用户自定义的类型,基于核心类型或者组合类型创建的自定义类型
示例:
// 核心类型
var a int = 10
var b float64 = 3.14
// 普通(自定义)类型
type Age int
type Person struct {
Name string
Age int
}
在上例中,Age 是基于 int 的普通类型,它虽然在内存上和 int 相同,但属于不同的类型系统层级。
5 小结
特性 值类型 引用类型
赋值行为 拷贝值 拷贝引用
是否共享底层数据 否 是
示例 int, struct, array slice, map, chan, interface, func, pointer
- 点赞
- 收藏
- 关注作者
评论(0)