15分钟学 Go 第 10 天:函数参数和返回值

第10天:函数参数和返回值

目标:理解函数如何传递参数

在Go语言中,函数是程序的基本构建块。了解如何传递参数和返回值是编写高效、可复用代码的重要步骤。本文将详细讲解函数参数的类型、传递方式以及如何处理返回值,辅以代码示例和流程图,以帮助你深入理解。

1. 函数参数的基础知识

1.1 函数的定义

在Go语言中,函数的基本定义如下:

func FunctionName(parameter1 type1, parameter2 type2) returnType {// 函数体
}
1.2 参数类型

函数可以接受不同类型的参数,包括基本数据类型(如int, float64, string等)、切片、数组、映射、结构体,甚至是其他函数。

1.3 返回值

函数不仅可以有一个返回值,实际上,可以返回多个值。返回值的类型在函数定义时和参数一样,可以是任何数据类型。

2. 参数传递方式

在Go语言中,有两种主要的参数传递方式:值传递和引用传递。

2.1 值传递

值传递是指将参数的值复制到函数内部。在函数内部对参数的修改不会影响到调用方的数据。

示例代码:

package mainimport "fmt"func modifyValue(val int) {val = 20fmt.Println("Inside modifyValue:", val) // 输出: Inside modifyValue: 20
}func main() {val := 10modifyValue(val)fmt.Println("Inside main:", val) // 输出: Inside main: 10
}
2.2 引用传递

引用传递是将参数的引用(地址)传递给函数。在函数内部修改参数的值会影响到调用方的数据。

示例代码:

package mainimport "fmt"func modifyReference(val *int) {*val = 20fmt.Println("Inside modifyReference:", *val) // 输出: Inside modifyReference: 20
}func main() {val := 10modifyReference(&val)fmt.Println("Inside main:", val) // 输出: Inside main: 20
}

3. 参数传递的细节

3.1 切片和数组的传递

切片是引用类型,传递切片时,会传递切片的引用。对切片的修改会影响到原始数据;数组则是值传递;对数组的修改不会影响原始数组。

示例代码:

package mainimport "fmt"// 处理切片
func modifySlice(s []int) {s[0] = 99
}// 处理数组
func modifyArray(arr [3]int) {arr[0] = 99
}func main() {// 切片slice := []int{1, 2, 3}modifySlice(slice)fmt.Println("After modifySlice:", slice) // 输出: After modifySlice: [99 2 3]// 数组array := [3]int{1, 2, 3}modifyArray(array)fmt.Println("After modifyArray:", array) // 输出: After modifyArray: [1 2 3]
}

4. 多返回值

Go语言允许函数返回多个值,这在处理错误时非常有用。

示例代码:

package mainimport "fmt"// 函数返回一个值和一个错误
func divide(a, b int) (int, error) {if b == 0 {return 0, fmt.Errorf("division by zero")}return a / b, nil
}func main() {result, err := divide(10, 2)if err != nil {fmt.Println(err)} else {fmt.Println("Result:", result) // 输出: Result: 5}result, err = divide(10, 0)if err != nil {fmt.Println(err) // 输出: division by zero}
}

5. 实战案例:计算矩形和圆形的面积

我们将构建一个简单的程序,计算矩形和圆形的面积,并使用函数参数和返回值传递数据。

详细代码实现:

package mainimport ("fmt""math"
)// 计算矩形的面积
func rectangleArea(length float64, width float64) float64 {return length * width
}// 计算圆形的面积
func circleArea(radius float64) float64 {return math.Pi * radius * radius
}func main() {length := 10.0width := 5.0rectArea := rectangleArea(length, width)fmt.Printf("Rectangle Area: %.2f\n", rectArea) // 输出: Rectangle Area: 50.00radius := 7.0circArea := circleArea(radius)fmt.Printf("Circle Area: %.2f\n", circArea) // 输出: Circle Area: 153.94
}

6. 代码运行流程图

下面是一个简单的流程图,展示函数调用的过程:

    +-------------------+|    main()        |+-------------------+|                   ||  +----------------+|  | rectangleArea  ||  +----------------+|  |  返回值:面积  |V  +----------------+  |                   ||  +----------------+|  |  circleArea    ||  +----------------+|  |  返回值:面积  |+-------------------+

7. 参数的命名

在Go语言中,函数参数可以有命名。在参数列表中指定参数名和类型,这样在函数内部就可以直接使用参数名。

示例代码:

package mainimport "fmt"// 参数命名
func add(x, y int) int {return x + y
}func main() {result := add(5, 7)fmt.Println("Result:", result) // 输出: Result: 12
}

8. 总结

在今天的学习中,我们深入探讨了Go语言中的函数参数和返回值的相关内容。通过实例代码,我们理解了:

  • 函数如何定义和使用参数
  • 值传递与引用传递的区别
  • 多返回值的使用场景
  • 使用函数计算特定的数据,如面积

掌握这些知识将有助于你在Go语言的编程过程中写出更加清晰、高效的代码。

9. 练习题

  1. 编写一个函数,接受一个整型切片,返回切片中所有元素的和和平均值。
  2. 编写一个函数,接受两个字符串参数,返回它们拼接后的结果。

怎么样今天的内容还满意吗?再次感谢观众老爷的观看,关注下方GZH,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用C++编写一个简单的游戏引擎:从游戏循环到物理与渲染的全面解析

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 构建一个基础的2D游戏引擎是一项富有挑战性但极具学习价值的任务。本文将通过从零开始的方式,逐步讲解如何使用C++开发一个简单的游戏引擎。内容涵盖了游戏引擎的核心架构设计,包括游戏循环、物理引擎和图形渲染…

DP—子数组,子串系列 第一弹 -最大子数组和 -环形子数组的最大和 力扣

你好,欢迎阅读我的文章~ 个人主页:Mike 所属专栏:动态规划 ​ 53. 最大子数组和 最大子数组和 ​ 分析: 使用动态规划解决 状态表示: 1.以某个位置为结尾 2.以某个位置为起点 这里使用以某个位置为结尾,结合题目要求&#…

MySQL8.0主从同步报ERROR 13121错误解决方法

由于平台虚拟机宿主机迁移,导致一套MySQL主从库从节点故障,从节点服务终止,在服务启动后,恢复从节点同步服务,发现了如下报错: mysql> show slave status\G; *************************** 1. row *****…

GDAL+C#实现矢量多边形转栅格

1. 开发环境测试 参考C#配置GDAL环境,确保GDAL能使用,步骤简述如下: 创建.NET Framework 4.7.2的控制台应用 注意: 项目路径中不要有中文,否则可能报错:can not find proj.db 在NuGet中安装GDAL 3.9.1和G…

OSI参考模型详解:初学者指南与实践案例

OSI参考模型详解:初学者指南与实践案例 OSI(Open System Interconnect)参考模型是一个由国际标准化组织(ISO)提出的七层网络分层模型,它为全球所有互联计算机系统提供了一个通用的通信框架,解决…

【Mysql】-锁机制-GAP锁

在 MySQL 的 InnoDB 存储引擎中,Gap 锁(间隙锁)是一种用于防止幻读的锁机制。幻读是指在一个事务中,多次执行相同的查询,结果集却不同,通常是由于其他事务插入了新的行。为了防止这种情况,InnoD…

无人机之自主飞行关键技术篇

无人机自主飞行指的是无人机利用先进的算法和传感器,实现自我导航、路径规划、环境感知和自动避障等能力。这种飞行模式大大提升了无人机的智能化水平和操作的自动化程度。 一、传感器技术 传感器是无人机实现自主飞行和数据采集的关键组件,主要包括&a…

软考-软件设计师(10)-专业英语词汇汇总与新技术知识点

场景 以下为高频考点、知识点汇总。 软件设计师上午选择题知识点、高频考点、口诀记忆技巧、经典题型汇总: 软考-软件设计师(1)-计算机基础知识点:进制转换、数据编码、内存编址、串并联可靠性、海明校验码、吞吐率、多媒体等: 软考-软件设计师(1)-计算机基础知识点:进制…

C语言复习第3章 函数

目录 一、函数介绍1.1 函数是什么1.2 C语言中函数的分类1.3 函数原型1.4 高内聚 低耦合1.5 C语言main函数的位置 二、函数的参数2.1 实参和形参2.2 函数的参数(实参)可以是表达式2.3 传值与传址(swap函数)2.4 明确形参是实参的临时拷贝2.5 void(如果不写函数返回值 默认是int)2…

python 爬虫 入门 三、登录以及代理。

目录 一、登录 (一)、登录4399 1.直接使用Cookie 2.使用账号密码进行登录 可选观看内容,使用python对密码进行加密(无结果代码,只有过程分析) 二、代理 免费代理 后续:协程,…

如何在OceanBase中新增系统变量及应用实践

因为系统变量涉及复杂的工程文件,为防止新增变量操作对软件系统的潜在影响,OceanBase为多数开发者设计了一套高效的编程框架。此框架允许开发者在新增及使用系统变量时,仅需专注于变量定义的细节。具体来说,通过运行一个Python脚本…

树莓派设置中文界面

树莓派设置中文界面 1.安装中文字体。 执行命令:sudo apt-get -y install ttf-wqy-zenhei 2.设置显示中文。 执行命令:sudo raspi-config 选择:4 Localisation Options --> 1 Change Locale 按空格键在前面打勾或去掉勾&#xff0…

Windows 11开发环境搭建与应用开发实践

1. 引言 随着微软发布Windows 11,操作系统领域迎来了许多新的功能和变化。Windows 11不仅优化了用户界面,还强化了性能与安全性,增加了对开发者友好的特性,使其成为一个理想的开发平台。无论是桌面应用、Web应用,还是跨平台移动应用,Windows 11都为开发者提供了强大的支…

企业级调度器 LVS

集群和分布式基础知识 系统性能的扩展方式 当一个系统,或一个服务的请求量达到一定的数量级的时候,运行该服务的服务器的性能和资源上限, 很容易成为其性能瓶颈。除了性能问题之外,如果只部署在单台服务器上,在此服务…

gitee建立/取消关联仓库

目录 一、常用指令总结 二、建立关联具体操作 三、取消关联具体操作 一、常用指令总结 首先要选中要关联的文件,右击,选择Git Bash Here。 git remote -v //查看自己的文件有几个关联的仓库git init //初始化文件夹为git可远程建立链接的文件夹…

uniapp uni.uploadFile errMsg: “uploadFile:fail

uniapp 上传后一直显示加载中 1.检查前后端上传有无问题 2.检查失败信息 await uni.uploadFile({url,filePath,name,formData,header,timeout: 30000000, // 自定义上传超时时间fail: async function(err) {$util.hideAll()// 失败// err 返回 {errMsg: "uploadFile:fai…

速盾:cdn能加速游戏吗?

CDN(内容分发网络)是一种通过分布在全球不同地区的服务器来缓存和传输网络内容的技术。它的主要目的是提高内容的传输速度和用户体验。虽然CDN主要用于加速网站的访问和内容传输,但它也可以应用于游戏加速。 在传统的在线游戏中,…

SpringCloud学习:Openfeign组件实现服务调用和负载均衡

OpenFeign:服务调用与负载均衡(服务端接口) 是什么:通过OpenFeign可以实现服务调用和负载均衡 OpenFeign是一个声明性web服务客户端, 怎么用:服务提供者提取公共接口用FrignClient标注,服务调…

【Flutter】基础入门:开发环境搭建

Flutter 是一个强大的跨平台框架,支持在 Android、iOS、Windows、Linux、Web 等多种平台上开发应用。下面将详细介绍如何在各个平台上构建 Flutter 开发环境,并使用相同的项目代码构建出一个可以在多个平台运行的跨平台 Demo。 Flutter 环境配置&#x…

浙大数据结构全题解汇总(C++实现)

浙大MOOC练习题题解汇总链接 浙大数据结构:01-复杂度1 最大子列和问题 浙大数据结构:01-复杂度2 Maximum Subsequence Sum 浙大数据结构:01-复杂度3 二分查找 浙大数据结构:02-线性结构1 两个有序链表序列的合并 浙大数据结构&am…