Go中结构体传值会复制副本,函数内修改不影响原值,大结构体建议用指针传递以提升性能,小结构体或需保护数据时可用值传递。

当Go语言中的结构体作为值类型在函数间传递时,会进行值拷贝。也就是说,传入函数的是原结构体的一个副本,函数内部对结构体的修改不会影响原始结构体。
Go中默认所有参数传递都是按值进行的。如果函数接收的是结构体类型(而不是指针),那么整个结构体的数据会被复制一份传入函数。
例如:
package main
import "fmt"
type Person struct {
Name string
Age int
}
func modify(p Person) {
p.Name = "Alice"
p.Age = 30
}
func main() {
person := Person{Name: "Bob", Age: 25}
modify(person)
fmt.Println(person) // 输出: {Bob 25}
}尽管
modify
main
person
立即学习“go语言免费学习笔记(深入)”;
结构体越大,拷贝的开销就越高。包含多个字段、数组或大对象的结构体会显著增加内存和CPU消耗。
建议:
*Struct
pprof
值传递适用于:
使用指针传递更合适的情况:
基本上就这些。理解值拷贝的行为有助于写出更安全、高效的Go代码。关键是根据结构体大小和使用场景决定是否传指针。不复杂但容易忽略细节。
以上就是Golang结构体作为值类型在函数间传递会发生什么的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号