【Go - 小心! Go中slice的传递陷阱 】

news/2025/2/3 6:09:35 标签: golang, 开发语言, 后端

📢注意:slice 是引用传递 ,传递过去的参数,内存没有重新分配。

示例

package main

import "fmt"

// 引用传递 ,传递过去的地址,内存没有重新分配
func test(abc []int) {
    abc[0] = -1
}

func main() {
	s := make([]int, 0, 2)
	s = append(s, 1) // [1]
	test(s)
	fmt.Println(s)
}

输出: [-1]

问题
一道经典题目,下面会输出什么呢。

package main
import "fmt"
func change(abc []int) {
    abc = append(abc, 4)
    for i := range abc {
        abc[i] = 4
    }
    fmt.Println(abc)
}
func main() {
    abc := []int{1, 2, 3}
    abc = append(abc, 4)
    change(abc)
    fmt.Println(abc)
}

输出结果

[4 4 4 4 4]
[4 4 4 4]

没有答对的小伙伴,可以同时参考这篇 【Go - MD太可怕了,小心! Go中Slice的append陷阱】

关键点

  • append 空间不足时,会重新分配空间;空间充足时,则不会重新分配
  • 切片类型的值传递
  • 切片的数据结构

http://www.niftyadmin.cn/n/5840525.html

相关文章

【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践

Hi ! 云边有个稻草人-CSDN博客 必须有为成功付出代价的决心,然后想办法付出这个代价。 目录 引言 1. 什么是自然语言处理(NLP)? 2. NLP的基础技术 2.1 词袋模型(Bag-of-Words,BoW&#xff…

Java 9模块开发:Eclipse实战指南

在上一篇教程中,我们已经了解了Java 9模块的基础知识。今天,我们将深入探讨如何使用Eclipse IDE来开发和运行Java 9模块。Eclipse作为一款强大的开发工具,为Java开发提供了丰富的功能支持。不过需要注意的是,对于Eclipse 4.7&…

React中使用箭头函数定义事件处理程序

React中使用箭头函数定义事件处理程序 为什么使用箭头函数?1. 传递动态参数2. 避免闭包问题3. 确保每个方块的事件处理程序是独立的4. 代码可读性和维护性 示例代码总结 在React开发中,处理事件是一个常见的任务。特别是当我们需要传递动态参数时&#x…

前端知识速记--HTML篇:src和href

前端知识速记–HTML篇:src和href 一、属性概述 1.1 src属性 src(source的缩写)属性用于指定外部资源的来源,通常用于嵌入媒体内容或脚本文件。它告知浏览器去哪个地址加载相应的资源。使用src时,浏览器在解析到该元…

helm-dashboard为Helm设计的缺失用户界面 - 可视化您的发布,它提供了一种基于UI的方式来查看已安装的Helm图表

一、helm-dashboard软件介绍(文末提供下载) Helm Dashboard是一个开源项目,它提供了一种基于UI的方式来查看已安装的Helm图表,查看它们的修订历史记录以及相应的k8s资源。它还允许用户执行简单的操作,如回滚到某个修订…

微信登录模块封装

文章目录 1.资质申请2.combinations-wx-login-starter1.目录结构2.pom.xml 引入okhttp依赖3.WxLoginProperties.java 属性配置4.WxLoginUtil.java 后端通过 code 获取 access_token的工具类5.WxLoginAutoConfiguration.java 自动配置类6.spring.factories 激活自动配置类 3.com…

C++【iostream】数据库的部分函数功能介绍

在 C 编程世界中,iostream 库扮演着举足轻重的角色,它是 C 标准库的核心组成部分,为程序提供了强大的输入输出功能。无论是简单的控制台交互,还是复杂的文件操作,iostream 库都能提供便捷高效的解决方案。本文将深入剖…

B+ 树的实现原理与应用场景

B 树是如何实现的全面分析 在进行数据库和文件系统的设计中,B 树是一种常用的数据结构。它不仅是 B 树的延伸,而且团结了性能优化和实现上的优势。本文将从学术理论和实现程序的角度,分析 B 树是如何实现的,以及它依赖于哪些具体…