Go 中通过指针实现变量名的“传入”与原地修改

张开发
2026/4/11 10:37:14 15 分钟阅读

分享文章

Go 中通过指针实现变量名的“传入”与原地修改
go 不支持直接传递变量名但可通过指针将变量的内存地址传入函数从而在函数内修改原始变量的值本文详解其原理、用法、典型示例及关键注意事项。 go 不支持直接传递变量名但可通过指针将变量的内存地址传入函数从而在函数内修改原始变量的值本文详解其原理、用法、典型示例及关键注意事项。在 Go 中所有参数都是按值传递pass-by-value——这意味着当你把一个变量如 varName传给函数时函数收到的是该变量值的一个副本对副本的任何修改都不会影响原始变量。因此像 changeColor(varName) 这样仅传入变量名或其值的方式无法实现“切换颜色并更新原变量”的效果。要真正修改调用方的原始变量必须传递其内存地址即使用指针。指针本身是按值传递的传递的是地址的副本但它指向的内存位置是唯一的因此函数可通过解引用*ptr读写该位置的数据。以下是一个完整、可运行的示例实现了颜色在 yellow 和 black 之间的切换package mainimport fmtconst ( yellow yellow black black)// changeColor 接收 *string 类型指针原地修改所指向的字符串func changeColor(color *string) { if *color yellow { *color black } else { *color yellow }}func main() { var varName string yellow fmt.Println(初始值:, varName) // 输出: 初始值: yellow changeColor(varName) // 传入地址varName fmt.Println(第一次调用后:, varName) // 输出: 第一次调用后: black changeColor(varName) fmt.Println(第二次调用后:, varName) // 输出: 第二次调用后: yellow}? 关键点说明 Mokker AI AI产品图添加背景

更多文章