全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用Golang理解值类型函数参数_函数内部修改不会影响外部

Go语言函数参数按值传递,传入的是原始变量副本,修改副本不影响原变量;基本类型、数组、结构体等值类型均遵循此规则,需显式传指针才能修改外部变量。

Go语言中,函数参数是按值传递的,这意味着传入函数的是原始变量的一个副本。对这个副本的任何修改,都不会影响到调用方的原始变量——尤其是对基本类型(如intstringbool)、数组、结构体等值类型而言,这一点尤为明显。

值类型参数的本质:复制一份独立数据

当你把一个值类型变量作为参数传给函数时,Go会在栈上为该参数分配一块**全新的内存空间**,并把原变量的值完整拷贝过去。函数内部操作的,是这块新内存里的数据,和外部变量毫无关联。

  • 整数、浮点数、布尔值、字符串:都是典型的值类型,传参即复制
  • 数组:比如 [3]int,整个数组内容被复制,不是指针
  • 结构体(不含指针字段):整个结构体字段逐个复制,包括嵌套的值类型

看一个清晰的例子

下面这段代码直观展示了值传递的行为:

func modify(x int) {
    x = 100
    fmt.Println("函数内 x =", x) // 输出:100
}

func main() {
    a := 42
    fmt.Println("调用前 a =", a) // 输出:42
    modify(a)
    fmt.Println("调用后 a =", a) // 仍然是 42,没变!
}

这里a的值被复制给了参数xx在函数内被改成100,但a本身完全不受影响。

为什么结构体也遵循这个规则?

很多人误以为“结构体大,应该传引用”,其实不然。只要没显式用*传指针,结构体就是按值传递:

type Person struct {
    Name string
    Age  int
}

func changeName(p Person) {
    p.Name = "Alice" // 修改的是副本
}

func main() {
    me := Person{Name: "Bob", Age: 30}
    changeName(me)
    fmt.Println(me.Name) // 输出 "Bob",不是 "Alice"
}

因为pme的完整拷贝,改p.Name只动了副本的字段。

想让外部变量被修改?得用指针

如果确实需要函数内部修改影响外部,唯一可靠的方式是传指针:

  • modify(x int) 改成 modify(x *int),然后用*x = 100
  • changeName(p Person) 改成 changeName(p *Person),再用p.Name = "Alice"
  • 调用时写modify(&a)changeName(&me)

这时传的是地址,函数操作的是同一块内存,自然能改变原始值。

理解值传递是掌握Go内存模型的基础。它让函数行为更可预测、更安全——没有意外的副作用。只有当你明确需要共享状态时,才引入指针。


# go  # golang  # go语言  #   # ai  # 为什么  # String  # 字符串  # 结构体  # bool  # int  # 指针  # 值类型 


相关文章: 如何零成本快速生成个人自助网站?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  如何使用Golang table-driven基准测试_多组数据测量函数效率  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  如何快速搭建高效香港服务器网站?  北京制作网站的公司,北京铁路集团官方网站?  已有域名和空间如何搭建网站?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  免费网站制作appp,免费制作app哪个平台好?  如何快速搭建FTP站点实现文件共享?  css网站制作参考文献有哪些,易聊怎么注册?  如何通过虚拟机搭建网站?详细步骤解析  建站之星如何快速解决建站难题?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何通过虚拟主机快速搭建个人网站?  如何在橙子建站中快速调整背景颜色?  想学网站制作怎么学,建立一个网站要花费多少?  Thinkphp 中 distinct 的用法解析  广德云建站网站建设方案与建站流程优化指南  建站之星安装路径如何正确选择及配置?  如何在Windows虚拟主机上快速搭建网站?  如何通过虚拟主机快速完成网站搭建?  建站168自助建站系统:快速模板定制与SEO优化指南  如何快速建站并高效导出源代码?  网站制作公司排行榜,抖音怎样做个人官方网站  javascript中的try catch异常捕获机制用法分析  SQL查询语句优化的实用方法总结  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  建站之星下载版如何获取与安装?  Swift中循环语句中的转移语句 break 和 continue  网站制作企业,网站的banner和导航栏是指什么?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  微课制作网站有哪些,微课网怎么进?  营销式网站制作方案,销售哪个网站招聘效果最好?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  C++中引用和指针有什么区别?(代码说明)  建站之星如何一键生成手机站?  如何高效利用200m空间完成建站?  如何通过NAT技术实现内网高效建站?  实现虚拟支付需哪些建站技术支撑?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  如何快速搭建安全的FTP站点?  全景视频制作网站有哪些,全景图怎么做成网页?  平台云上自主建站:模板化设计与智能工具打造高效网站  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  大连 网站制作,大连天途有线官网?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。