值传递和引用传递
-
-
在Go语言中五个引用类型变量,其他都是值类型
-
slice
-
map
-
channel
-
interface
-
func()
-
-
引用类型作为参数时,称为浅拷贝,形参改变,实参数跟随变化.因为传递的是地址,形参和实参都指向同一块地址
-
值类型作为参数时,称为深拷贝,形参改变,实参不变,因为传递的是值的副本,形参会新开辟一块空间,与实参指向不同
-
代码演示
-
值类型作为参数代码演示
package main import "fmt" func demo(i int, s string) { i = 5 s = "改变" } func main() { i := 1 s := "原值" demo(i, s) fmt.Println(i, s) //输出:5 原值 }
- 引用传递代码示例
package main import "fmt" func demo(arg []int) { arg[len(arg)-1] = 110 } func main() { s := []int{1, 2, 3} demo(s) fmt.Println(s) //输出:[1 2 110] }
- 如果希望值类型实参跟随形参变化,可以把值类型指针作为参数
package main import "fmt" //行参指针类型 func demo(i *int, s string) { //需要在变量前面带有*表示指针变量 *i = 5 s = "改变" } func main() { i := 1 s := "原值" //注意此处第一个参数是i的地址,前面& //s保留为值类型 demo(&i, s) fmt.Println(i, s) //输出:5 原值 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人