0

0

Go 语言中切片值传递为何能修改外部切片的元素?

花韻仙語

花韻仙語

发布时间:2024-10-26 14:51:01

|

857人浏览过

|

来源于php中文网

原创

go 语言中切片值传递为何能修改外部切片的元素?

go 语言中切片值传递的困惑

尽管 go 语言中一切都是值传递,但我们却发现修改函数内部切片的元素竟然能影响到外部切片。这是为何?

示例代码如下:

func exampleFunc(arr []int) {
    arr[0] = 100
    arr[1] = 101
    
    arr = append(arr, 111)
}

func main() {
    arr := make([]int, 2, 5)
    for i := 0; i < len(arr); i++ {
        arr[i] = i
    }
    exampleFunc(arr)
    for i := 0; i 

代码中,切片 arr 作为值传递给 examplefunc 函数。然而,函数内对切片元素 arr[0] 和 arr[1] 的修改却能在外部 main 函数中反映出来。相反,向切片追加元素的操作却无效。

背后的原理:共享底层数组

虽然切片是值传递,但它们共享一个底层数组(称为 underlying array)。底层数组才是实际存储切片元素的内存空间。函数外部的切片和函数内部的切片虽然是不同的变量,但它们共享同一个底层数组,这意味着对底层数组的修改将影响到所有指向该数组的切片。

UP简历
UP简历

基于AI技术的免费在线简历制作工具

下载

修改元素对底层数组的影响

通过下标修改切片元素时,我们实际上在修改底层数组中的元素。这种修改对共享该底层数组的所有切片都是可见的,无论它们是否在函数内部。因此,examplefunc 中的 arr[0] 和 arr[1] 的修改能够被外部 main 函数观察到。

追加元素对底层数组的影响

然而,append 函数在切片末尾追加元素时,它可能会需要更大的底层数组。在这种情况下,append 会创建一个新的底层数组,并将切片中的元素复制到新的数组中。这意味着返回的新切片不再与输入的切片共享同一个底层数组。因此,examplefunc 中对 arr 的追加操作不会影响到外部 main 函数的 arr 切片。

相关专题

更多
java值传递和引用传递有什么区别
java值传递和引用传递有什么区别

java值传递和引用传递的区别:1、基本数据类型的传递;2、对象的传递;3、修改引用指向的情况。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

106

2024.02.23

go语言 数组和切片
go语言 数组和切片

本专题整合了go语言数组和切片的区别与含义,阅读专题下面的文章了解更多详细内容。

46

2025.09.03

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

343

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1070

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

174

2025.09.12

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

34

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

14

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

33

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

18

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号