15分钟学Go 第9天:函数的定义与调用

devtools/2024/10/23 22:17:37/

第9天:函数的定义与调用

欢迎来到第9天的Go语言学习模块!今天我们将深入探讨函数的定义与调用,帮助你掌握如何编写和使用函数。学习函数不仅是Go语言的基础,也是程序设计的核心概念之一。这一节将详细介绍函数的结构、参数传递、返回值、命名返回值以及切片和映射等在函数中的常用操作。

学习目标

  • 理解函数的基本概念和结构
  • 学会定义和调用函数
  • 掌握参数传递和返回值的使用
  • 学习命名返回值
  • 掌握在函数中使用切片和映射

1. 函数的基本概念

函数是一个独立的代码块,可以被调用来执行特定的任务。在Go语言中,函数是一等公民,这意味着你可以将函数赋值给变量、作为参数传递给其他函数,或作为返回值返回。

函数的结构

定义一个函数通常包括以下几个部分:

  • 函数声明
  • 函数名
  • 参数列表
  • 返回值类型(可选)
  • 函数体

函数的基本语法

func 函数名(参数1 类型, 参数2 类型) 返回值类型 {// 函数体
}
示例
func add(a int, b int) int {return a + b
}

在这个例子中,add是函数名,接受两个整数参数ab,返回它们的和。


2. 定义和调用函数

2.1 定义函数

我们可以创建一个简单的函数来计算两个数的乘积。

func multiply(a int, b int) int {return a * b
}

2.2 调用函数

你可以通过函数名加上参数来调用函数。

func main() {result := multiply(3, 4)fmt.Println("The product is:", result)
}

完整示例代码

package mainimport "fmt"func multiply(a int, b int) int {return a * b
}func main() {result := multiply(3, 4)fmt.Println("The product is:", result)
}

运行过程图

+-------------------+
|       main       |
+-------------------+|v
+-------------------+
|   multiply(3, 4)  |
+-------------------+|v
+-------------------+
|   Return 12 to    |
|       main        |
+-------------------+|v
+-------------------+
| fmt.Println("The  |
| product is: 12")  |
+-------------------+

3. 函数参数与返回值

3.1 参数传递

Go语言支持多种参数类型和返回值类型,可以灵活地处理不同的功能需求。

示例:多个参数
func divide(a float64, b float64) float64 {return a / b
}func main() {result := divide(10.0, 2.0)fmt.Println("10.0 divided by 2.0 is:", result)
}

3.2 返回多个值

Go可以返回多个值,这是它的一个特别之处。例如,我们可以创建一个函数来返回商和余数。

func divideAndRemainder(a int, b int) (int, int) {return a / b, a % b
}func main() {quotient, remainder := divideAndRemainder(10, 3)fmt.Println("Quotient:", quotient, "Remainder:", remainder)
}

3.3 完整返回示例代码

package mainimport "fmt"func divideAndRemainder(a int, b int) (int, int) {return a / b, a % b
}func main() {q, r := divideAndRemainder(10, 3)fmt.Println("Quotient:", q, "Remainder:", r)
}

运行过程图

+-------------------+
|       main       |
+-------------------+|v
+-------------------+
| divideAndRemainder(10, 3) |
+-------------------+|v
+-------------------+
| Return (3, 1)    |
+-------------------+|v
+-------------------+
| Print "Quotient: 3, Remainder: 1" |
+-------------------+

4. 命名返回值

在Go语言中,函数可以使用命名返回值。命名返回值可以使代码更具可读性。

示例

func namedReturn(a int, b int) (sum int) {sum = a + breturn // 直接返回命名返回值
}func main() {res := namedReturn(5, 7)fmt.Println("The sum is:", res)
}

运行过程图

+-------------------+
|       main       |
+-------------------+|v
+-------------------+
| namedReturn(5, 7) |
+-------------------+|v
+-------------------+
| sum = 12         |
+-------------------+|v
+-------------------+
| Return 12        |
+-------------------+

5. 在函数中使用切片和映射

5.1 在函数中使用切片

切片是Go语言中非常重要的一种数据结构。我们可以定义一个函数来计算切片的总和。

func sumSlice(numbers []int) int {sum := 0for _, num := range numbers {sum += num}return sum
}func main() {nums := []int{1, 2, 3, 4, 5}total := sumSlice(nums)fmt.Println("Sum of slice:", total)
}

5.2 在函数中使用映射

映射(map)可以让你存储键值对。我们可以创建一个函数来遍历映射,并返回所有值的总和。

func sumMap(values map[string]int) int {sum := 0for _, val := range values {sum += val}return sum
}func main() {myMap := map[string]int{"a": 1, "b": 2, "c": 3}total := sumMap(myMap)fmt.Println("Sum of map values:", total)
}

完整示例代码

package mainimport "fmt"func sumSlice(numbers []int) int {sum := 0for _, num := range numbers {sum += num}return sum
}func sumMap(values map[string]int) int {sum := 0for _, val := range values {sum += val}return sum
}func main() {nums := []int{1, 2, 3, 4, 5}totalSlice := sumSlice(nums)fmt.Println("Sum of slice:", totalSlice)myMap := map[string]int{"a": 1, "b": 2, "c": 3}totalMap := sumMap(myMap)fmt.Println("Sum of map values:", totalMap)
}

运行过程图

+-------------------+
|       main       |
+-------------------+|v
+-------------------+
| sumSlice([1,2,3,4,5]) |
+-------------------+|v
+-------------------+
| Return 15        |
+-------------------+|v
+-------------------+
| sumMap({"a":1,"b":2,"c":3}) |
+-------------------+|v
+-------------------+
| Return 6         |
+-------------------+

6. 总结

在本节中,我们详细探讨了Go语言的函数定义与调用的过程。我们学习了如何定义简单和复杂的函数,掌握了参数及返回值的使用,同时还了解了命名返回值和在函数中使用切片与映射的操作。

在实际编程中,函数的合理使用可以极大地提高代码的可复用性、可读性和结构性。希望通过这一天的学习,你对Go语言中的函数有了更深刻的理解。

7. 小练习

为了巩固所学知识,建议你完成以下小练习:

  1. 编写一个函数,接受一个字符串切片,返回所有字符串的长度之和。
  2. 编写一个函数,接受一个映射,返回值的最大值。
  3. 编写一个函数,接受一个切片,返回一个新的切片,包含所有偶数元素。

完成小练习后,你可以在下一节中分享你的成果,我们将进行讨论和反馈。


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


http://www.ppmy.cn/devtools/128268.html

相关文章

【VUE】Vue渲染列表为什么要加key

提升Vue渲染性能:帮助 Vue 跟踪每个节点的身份,进行高效的 DOM 操作;如果不设置key值,则 Vue 无法准确地知道哪些元素是新增、删除或者移动的,只能重新渲染整个列表,导致性能下降;只有通过为每个…

计算机毕设项目:网上订餐管理系统(Java+Springboot+MySQL),完整源代码+数据库+毕设文档+部署说明

本文关键字:Java编程;Springboot框架;毕业设计;毕设项目;编程实战;项目源代码;程序数据库;毕设文档;开题报告和任务书;项目部署说明;网上订餐管理…

无法获得下列许可 SOLIDWORKS Standard。 无法从使用许可服务器内读取数据,(-16,10009,10054)

无法获得下列许可 SOLIDWORKS Standard。 无法从使用许可服务器内读取数据,(-16,10009,10054) 错误如图 打开xxclean 扩展功能 服务无法启动

ceph pg stale 恢复

问题 如果 ceph -s 看到 ceph 有类似如下状态的 pg data:volumes: 1/1 healthypools: 5 pools, 113 pgsobjects: 6.94k objects, 22 GiBusage: 24 GiB used, 33 TiB / 33 TiB availpgs: 0.885% pgs not active366/13880 objects degraded (2.637%)

JVM、字节码文件介绍

目录 初识JVM 什么是JVM JVM的三大核心功能 JVM的组成 字节码文件的组成 基础信息 Magic魔数 主副版本号 其它基础信息 常量池 字段 方法 属性 字节码常用工具 javap jclasslib插件 阿里Arthas 初识JVM 什么是JVM JVM的三大核心功能 1. 解释和运行虚拟机指…

Educational Codeforces Round 170 (Rated for Div. 2) (A~C)

文章目录 写在前面A. Two Screens思路code B. Binomial Coefficients, Kind Of思路code C. New Game思路code Educational Codeforces Round 170 (Rated for Div. 2) 写在前面 这场比赛打的巨烂,前几周没有认真学算法,这周刷了几道题就直接打了这场比赛…

回溯法求解简单组合优化问题

此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报所用教材:北京大学屈婉玲教授《算法设计与分析》课程资料:https://www.icourse163.org/course/PKU-1002525003 承诺不用于任何商业用途,仅用于学术交流和分享 更多内容请关注许志伟…

【动手学深度学习】7.6. 残差网络(ResNet)(个人向笔记)

1. ResNet精读论文视频的Introduction部分 深度卷积神经网络好,好在可以叠加很多层,每一层都可以提取不一样的特征但是网络特别深的时候,梯度要么爆炸要么消失,我们能做的就是将参数随机初始化做好,或者是在中间加一些…