首页 > 后端开发 > Golang > 正文

Golang值类型默认行为 基本类型与结构体比较

P粉602998670
发布: 2025-08-20 11:08:01
原创
1030人浏览过
Go中值类型赋值时会复制数据,包括基本类型和结构体,修改副本不影响原值;结构体可比较当所有字段可比较且类型相同;含不可比较字段则无法使用==;通过指针可共享数据并修改原值,避免大对象拷贝提升性能。

golang值类型默认行为 基本类型与结构体比较

在 Go 语言中,值类型(Value Types)的默认行为是赋值时进行数据拷贝。这意味着当你将一个值类型的变量赋给另一个变量,或作为参数传递给函数时,系统会创建该值的一个副本,而不是引用原始数据。这种行为适用于所有基本类型和结构体类型,只要它们没有被显式地取地址使用指针。

基本类型的值拷贝行为

Go 的基本类型如 intfloat64boolstring 等都是值类型。它们的赋值操作会直接复制底层数据。

例如:

a := 10
b := a  // b 得到 a 的副本
b = 20  // 修改 b 不影响 a
fmt.Println(a) // 输出 10
登录后复制

这里 ab 是独立的变量,修改其中一个不会影响另一个。

立即学习go语言免费学习笔记(深入)”;

结构体的值拷贝行为

结构体(struct)也是值类型。当结构体变量被赋值或传参时,整个结构体的内容会被复制。

type Person struct {
    Name string
    Age  int
}

p1 := Person{Name: "Alice", Age: 30}
p2 := p1           // p2 是 p1 的完整拷贝
p2.Age = 35        // 修改 p2 不影响 p1
fmt.Println(p1.Age) // 输出 30
登录后复制

即使结构体包含多个字段,赋值操作仍会复制所有字段的值。如果字段本身是值类型,就逐字段拷贝;如果是引用类型(如 slice、map),则拷贝的是引用,但结构体本身仍是值传递。

Poixe AI
Poixe AI

统一的 LLM API 服务平台,访问各种免费大模型

Poixe AI 61
查看详情 Poixe AI

值类型比较:何时相等?

Go 支持使用 ==!= 对值类型进行比较,前提是类型可比较。

  • 基本类型可以直接比较:数值、字符串、布尔值等。
  • 结构体也可以比较,但仅当所有字段都可比较时,并且必须是同类型。
  • 结构体相等意味着所有字段都相等。

示例:

p1 := Person{Name: "Bob", Age: 25}
p2 := Person{Name: "Bob", Age: 25}
fmt.Println(p1 == p2) // 输出 true
登录后复制

但如果结构体中包含不可比较的字段(如 slice、map、func),则结构体整体不可比较,使用 == 会编译错误

指针改变默认行为

虽然结构体默认是值类型,但通过使用指针可以改变其行为,实现共享和修改原始数据。

p1 := Person{Name: "Alice", Age: 30}
ptr := &p1
ptr.Age = 35  // 修改通过指针影响原始变量
fmt.Println(p1.Age) // 输出 35
登录后复制

指针本身是引用,但指向的结构体仍是值类型。使用指针传递结构体可以避免大对象拷贝,提升性能。

基本上就这些。Go 的值类型设计强调明确性和安全性,理解拷贝与比较的默认行为有助于写出更清晰、无副作用的代码。

以上就是Golang值类型默认行为 基本类型与结构体比较的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号