Golang函数参数默认按值传递,需用指针修改原变量;结构体传指针更高效且可修改,切片映射为引用类型但重分配时需指针,避免对nil解引用。

在Golang中,函数参数默认是按值传递的,也就是说函数接收到的是变量的副本。如果想在函数内部修改原始变量的值,就需要使用指针作为参数。特别是对于结构体、切片、映射等大型数据类型,使用指针对性能和功能都至关重要。
指针保存的是变量的内存地址。通过在参数前加*,可以让函数接收一个指针,从而直接操作原变量。
例如,交换两个整数的值:
func swap(a, b *int) {
*a, *b = *b, *a
}
调用时使用&取地址:
立即学习“go语言免费学习笔记(深入)”;
x, y := 10, 20
swap(&x, &y)
// 此时 x == 20, y == 10
当结构体较大时,传指针比传值更高效,也能让函数修改原结构体。
type Person struct {
Name string
Age int
}
func updatePerson(p *Person) {
p.Age += 1
p.Name = "Updated " + p.Name
}
调用方式:
person := Person{Name: "Alice", Age: 25}
updatePerson(&person)
// person 被修改
切片和映射本身是引用类型,函数内可以修改其元素或键值对,无需指针。但如果你要重新分配整个切片(比如用 make 或 append 并赋值给形参),就需要指针才能影响原变量。
例如,重置切片:
func resetSlice(s *[]int) {
*s = []int{}
}
调用:
data := []int{1, 2, 3}
resetSlice(&data)
// data 变为空切片
常见错误包括:忘记解引用、对 nil 指针操作、误以为 map 或 slice 传参能改变其底层数组引用。
正确做法:
基本上就这些。掌握指针参数的关键是理解“值传递”与“地址传递”的区别,明确何时需要修改原变量。Golang 的指针设计简洁,合理使用能提升代码效率和可读性。
以上就是如何在Golang中实现指针函数参数的修改_Golang指针参数修改操作方法汇总的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号