理解go语言的核心和普通引用类型

举报
码乐 发表于 2025/07/31 15:44:27 2025/07/31
【摘要】 1 简介在 Go(Golang)中,普通类型/值的赋值规则以及核心类型的定义是语言设计的重要组成部分,理解这部分有助于写出更高效和健壮的 Go 代码。 2 Go 中普通类型/值的赋值规则Go 是 静态强类型语言,赋值行为主要遵循值语义,即 默认是值拷贝。✅ 特点如下: 类型分类 赋值行为 值类型(value types) 赋值时会复制整个值(即值拷贝) 引用类型(r...

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
【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。