Golang 开发实战day11 - Pass By Value

🏆个人专栏
🤺 leetcode
🧗 Leetcode Prime
🏇 Golang20天教程
🚴‍♂️ Java问题收集园地
🌴 成长感悟
欢迎大家观看,不执着于追求顶峰,只享受探索过程

Golang 开发实战day11 - 按值传递

  在Go语言的世界里,变量就像一个个精灵球,存储着各种各样的数据。而赋值就像将数据从一个宝箱(精灵球)传递到另一个宝箱(精灵球)的过程。但是,你知道吗?Go语言中的赋值操作其实暗藏着玄机,它可以分为按值传递按引用传递两种方式。今天,就让我们一起走进Go语言的赋值世界,揭秘按值传递的秘密!

  按值传递:复制数据,开启独立旅程

  当我们使用按值传递时,就像大家最熟悉的硬盘备份一样,将老硬盘中的资源复制一份,然后将复制传递给大容量的新硬盘中。这不言而喻了吧,原来的硬盘资源完好无损,而新大容量硬盘中也拥有了相同的资源,但它们是两个完全独立的东西。

1. 变量分组

A 组B 组
StringsSlices
IntsMaps
FloatsSlices
Booleans
Arrays
Structs

  这些结构都是我们需要了解的,理解并掌握这两组类型的差异以及它们的工作方式对于我们今后工作还是比较重要的。其中Structs是比较特别的结构体,需要后期我们重点了解。下面是一些示例

2. 示例代码

func updateName(x string) {
	x = "大雄"
}

func main() {
	// 组A : strings, ints, bools, floats, arrays, structs
	name := "小叮当"

	updateName(name)

	fmt.Println(name)
}

Output:
在这里插入图片描述
  代码中我声名一个name的变量,它是字符串类型。之后创建了一个updateName方法,可以传入string类型的x,以便我们之后进行调用。但是我们看到输出内容,“小叮当”并没有被覆盖掉。

  这是为什么呢?每次我们将一个值或一个变量传递到函数中的时候,都会创建一个变量的副本。所以updateName()中的name,并不是最开始的name;所以在update中更新的也只是副本的name,并不是我们原始的name值。是不是有些晕?没关系,那就在自己的编辑器里跑一遍就会理解了!

3. 计算机中的存储

  当然,这里更是为了方便大家理解,给出了上图说话
在这里插入图片描述

  这里说明原始的name在内存中的0x0002位置,而传递到方法中的副本x位置则是在0x0003位置。所以才导致不会改变原始值。
在这里插入图片描述
  那么如何改进让它进行修改呢?

func updateName(x string) string {
	x = "大雄"
	return x
}

func main() {
	// 组A : strings, ints, bools, floats, arrays, structs
	name := "小叮当"

	name = updateName(name)

	fmt.Println(name)
}

Output:
在这里插入图片描述
  这里我们可以看到原始数据已被覆盖了!

  接下来我们以组B来作为示例

func updateMenu(y map[string] float64) {
	y["巧克力派"] = 8
}

func main() {
	
	// 组 B -> slices, maps, functions
	menu := map[string] float64{
		"拿铁":	9.9,
		"汉堡": 13.9,
	}

	updateMenu(menu)
	fmt.Println(menu)
}

Output:

在这里插入图片描述
  不同于string的单独项目,这里menu是一个map,由于最初没有巧克力派,所以在调用UpdateMenu后,map中加入了巧克力派的信息。

4. 按值传递的优点:

  • 安全性高:由于不会影响源变量,因此可以避免意外修改源数据。
  • 易于理解:赋值操作直观易懂,不会引起混淆。

5 按值传递的缺点:

  • 效率低:对于大型数据结构,按值传递可能会导致大量的内存复制,降低运行效率。

6. 总结:

  按值传递是一种安全、易于理解的赋值方式,适用于传递基本类型数据和小型数据结构。但对于大型数据结构,按值传递可能会导致效率低下,因此建议使用按引用传递的方式。

  请记住,赋值操作看似简单,但背后却蕴含着Go语言的赋值机制。理解按值传递和按引用传递的差异,可以帮助你更有效地编写Go语言代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/551469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud中的nacos配置中心分析

一、概述 nacos可以作为配置管理使用,为各个微服务之间提供统一的配置中心,方便管理所有服务的配置。 二、什么是配置中心? 配置中心:一般SpringBoot项目都使用在resources下创建类似application.yml之类的配置文件来管理整个项目…

微信生态洗牌,私域拥抱公域的逐步试探

一直被人们奉为“私域神器”的微信,如今,变化越来越大了,微信的几次更新,透露出很多不一样的信息,在微信的很多使用场景中,都逐渐在向平台化公域流量分发的方向发展,不断的尝试从私域走向公域&a…

2024年【起重机械指挥】考试题及起重机械指挥复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 起重机械指挥考试题是安全生产模拟考试一点通总题库中生成的一套起重机械指挥复审模拟考试,安全生产模拟考试一点通上起重机械指挥作业手机同步练习。2024年【起重机械指挥】考试题及起重机械指挥复审模拟…

社科院与新加坡社科大学工商管理博士——在职读博行而不辍,未来可期

在职读博,对于许多人来说,既是一种挑战,也是一种机遇。它要求我们在繁忙的工作之余,还要抽出时间来深入研究学术,不断提升自己的专业素养。然而,正是这种行而不辍的精神,让我们能够在职业生涯中…

C++类和对象:构造函数,析构函数,拷贝构造

文章目录 1.类的6个默认成员函数2. 构造函数2.1 概念2.2 特性 3.析构函数3.1 概念3.2 特性 4.拷贝构造 1.类的6个默认成员函数 一个类中什么都不写,就是空类。而空类实际上有成员,当一个类中什么都不写时,编译器会生成六个对应默认成员函数。…

解读我国最新网络安全运维与数据处理安全规范:强化数字化时代安全基石

近日,全国网络安全标准化技术委员会秘书处公布了一系列重要的网络安全与数据安全相关技术规范草案,包括《网络安全技术 网络安全运维实施指南》、《网络安全技术 信息系统灾难恢复规范》以及《数据安全技术 政务数据处理安全要求》。这些规范旨在应对当前…

JavaScript权威指南(第7版) 笔记 - 第 7 章 数组

能用代码说清楚的,绝不多废话!!!!!! Linux创始人Linus的名言:Talk is cheap,show me the code ! ,博主技术博文会精心给出能说明问题的范例代码!…

安装 k8s集群的问题:默认容器运行时从 Docker 改为 Containerd

安装 k8s集群的问题:默认容器运行时从 Docker 改为 Containerd 1、背景2、容器运行时从 Docker 改为 Containerd2.1、安装 Containerd:2.2、生成 Containerd 的配置文件2.3 、创建 /etc/crictl.yaml 文件2.4 、配置 Containerd 服务开机自启 &#x1f49…

算法与数据结构要点速学——排序算法

排序算法 所有主要的编程语言都有一个内置的排序方法。假设并说排序成本为 O(n*log n),通常是正确的,其中 n 是要排序的元素数。为了完整起见,这里有一个图表,列出了许多常见的排序算法及其完整性。编程语言实现的算法各不相同&a…

【GDB调试技巧】提高gdb的调试效率

目录 🌞gdb的启动 🌞gdb技巧 🌼1. gdb小技巧汇总 🌼2. 打印输出指定地址的值 🌼3. 查看当前执行到哪行代码代码内容 3.1 方式一:info line 结合 list 。 3.2 方式二:f 3.3 方式三&#…

WebGIS面试题(第五期)

WebGIS面试题(第五期) 以下题目仅为部分题目,全部题目在公众号{GISer世界},答案仅供参考 1、Cesium的核心组件有哪些? Cesium的核心组件包括Viewer、Scene、Model、Geometry、Material和Camera等。其中,…

Latex(从入门到入土)1

第一章:初识Latex 1、安装Latex,当然可以安装官方的开放版本,也可以去找找别人发的资源。我这里只介绍我的学习经过。如果想下载最新的软件资源,我这里推荐微信公众号:软件智库,通过号主提供的网址是可以下…

基于大数据的全国热门景点数据可视化分析系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文将介绍如何使用Python中的Pandas库进行数据挖掘,并结合Flask Web框架实现一个旅游景点数据分析系统。该系统将包括以下功能模块:热门景点概况、景点星级与评分分析、景…

Docker 学习笔记(十):Centos7 中 Docker 部署 Redis 集群,打包 SpringBoot 微服务

一、前言 记录时间 [2024-4-17] 系列文章简摘: Docker 学习笔记(六):挑战容器数据卷技术一文通,实战多个 MySQL 数据同步,能懂会用,初学必备 Docker 学习笔记(七)&#x…

基于Copula函数的风光功率联合场景生成_任意修改生成的场景数目(附带Matlab代码)

基于Copula函数的风光功率联合场景生成 削减为6个场景 部分展示削减为5个场景 部分展示 风光等可再生能源出力的不确定性和相关性给系统的设计带来了极大的复杂性,若忽略这些因素,势必会在系统规划阶段引入次优决策风险。因此,在确定系统最佳…

Linux sort/uniq/wc

文章目录 1. sort 排序将线程ID从大到小排序 2.uniq 临近去重3.wc word cnt 统计 1. sort 排序 将线程ID从大到小排序 grep -v是反向筛选,利用USER,排除掉首行 awk是打印第1 2列 sort -n是代码以数值大小做排序,不加的话会以字符排序。 -k是…

Go 单元测试之HTTP请求与API测试

文章目录 一、httptest1.1 前置代码准备1.2 介绍1.3 基本用法 二、gock2.1介绍2.2 安装2.3 基本使用2.4 举个例子2.4.1 前置代码2.4.2 测试用例 一、httptest 1.1 前置代码准备 假设我们的业务逻辑是搭建一个http server端,对外提供HTTP服务。用来处理用户登录请求…

腾讯实验室推出类似 Sora 的长视频生成Mira;阿里巴巴推出强大的代码生成模型CodeQwen1.5

✨ 1: Mira 腾讯PCG ARC实验室推出Mira:类似 Sora 的长视频生成 Mira(Mini-Sora),是一个尝试生成高质量、长时视频的初步探索项目,以Sora风格进行长视频生成。与现有的文本到视频(Text-to-Video, T2V&a…

2024年【高处安装、维护、拆除】试题及解析及高处安装、维护、拆除模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年【高处安装、维护、拆除】试题及解析及高处安装、维护、拆除模拟试题,包含高处安装、维护、拆除试题及解析答案和解析及高处安装、维护、拆除模拟试题练习。安全生产模拟考试一点通结合国家高处安装…

基于SSM+Jsp+Mysql的贝儿米幼儿教育管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…