go 不支持直接传递变量名,但可通过指针将变量的内存地址传入函数,从而在函数内修改原始变量的值;本文详解其原理、用法、典型示例及关键注意事项。 go 不支持直接传递变量名,但可通过指针将变量的内存地址传入函数,从而在函数内修改原始变量的值;本文详解其原理、用法、典型示例及关键注意事项。在 Go 中,所有参数都是按值传递(pass-by-value)------这意味着当你把一个变量(如 varName)传给函数时,函数收到的是该变量值的一个副本,对副本的任何修改都不会影响原始变量。因此,像 changeColor(varName) 这样仅传入变量名(或其值)的方式,无法实现"切换颜色并更新原变量"的效果。要真正修改调用方的原始变量,必须传递其内存地址,即使用指针。指针本身是按值传递的(传递的是地址的副本),但它指向的内存位置是唯一的,因此函数可通过解引用(*ptr)读写该位置的数据。以下是一个完整、可运行的示例,实现了颜色在 yellow 和 black 之间的切换:package mainimport "fmt"const ( 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产品图添加背景
相关推荐
Elastic 中国社区官方博客4 分钟前
如何比较两个 Elasticsearch 索引并找出缺失的文档第一程序员14 分钟前
Rust Agent 子进程执行:Command 之前,先定义输入和超时DLYSB_16 分钟前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?儒雅的大叔25 分钟前
MySQL数据库InnoDB数据恢复工具使用总结skywalk816329 分钟前
设计并实现段言的 C FFI 绑定机制 @Traeweixin_BYSJ198743 分钟前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954观远数据1 小时前
ChatBI选型对比:从意图识别到SQL修复,六个维度打分决定是否值得投产嘉&年华1 小时前
【第008篇】通过dexp和dimp命令导出和导入dmp文件(适用于达梦数据库)EQUINOX12 小时前
【论文阅读】| MoCo精读哥是强混3 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务