当前位置: 首页 > news >正文

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

第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大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!
在这里插入图片描述

相关文章:

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

第9天:函数的定义与调用 欢迎来到第9天的Go语言学习模块!今天我们将深入探讨函数的定义与调用,帮助你掌握如何编写和使用函数。学习函数不仅是Go语言的基础,也是程序设计的核心概念之一。这一节将详细介绍函数的结构、参数传递、…...

Java虚拟机:JVM介绍

1024 程序员节日快乐!愿您我的代码永远没有 bug ,人生永远没有 bug ! JVM 概述JVM 架构 概述 JVM( Java Virtual Machine ,Java 虚拟机),是 Java 语言的运行环境,是运行所有 Java 程…...

R数据科学 16.5.3练习题

(1) 编写代码以使用一种映射函数完成以下任务。 a. 计算 mtcars 数据集中每列的均值。 b. 确定 nycflights13::flights 数据集中每列的类型。 c. 计算 iris 数据集中每列唯一值的数量。 d. 分别使用 μ -10、0、10 和 100 的正态分布生成 10 个随机数。 library(purrr) # 计算…...

通过conda install -c nvidia cuda=“11.3.0“ 安装低版本的cuda,但是却安装了高版本的12.4.0

问题 直接通过 conda install -c nvidia cuda"11.3.0"安装得到的却是高版本的 不清楚原理 解决方法 不过我们可以分个安装 runtime toolkit 和 nvcc 安装指定版本的 cudatoolkit 和 nvcc conda install -c nvidia cuda-cudart"11.3.58" conda instal…...

简易CPU设计入门:验证取指令模块

项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&#xff…...

【MySQL数据库】MySQL主从复制

文章目录 MySQL主从复制MySQL主从复制的分类MySQL主从复制原理MySQL主从复制的配置步骤MySQL主从复制的同步模式 MySQL主从复制实验环境准备关闭防火墙和 SELinux时间同步主服务器设置从服务器设置 MySQL 主从复制配置主服务器配置从服务器配置(以 Slave1 为例&…...

CDC变更数据捕捉技术是什么?和ETL有什么不同?

一、什么是CDC技术? 变更数据捕获(Change Data Capture,简称 CDC)是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理: 1.监测数据源:CDC 工具会持续监测指定的数据源,如数据库表、文件系统…...

一种用于推进欧洲临床中心中风管理的联邦学习平台即服务

论文标题:A Federated Learning Platform as a Service for Advancing Stroke Management in European Clinical Centers 作者信息: Diogo Reis Santos, Albert Sund Aillet, Antonio Boiano, Usevalad Milasheuski, Lorenzo Giusti, Marco Di Gennaro…...

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而,电脑版的bilibili不能通过手机控制视频翻页和调节音量,这意味着观看视频时需要一直坐在电脑旁边。那么,有没有办法制作一个手机遥控器来控制bilibili电脑版呢? 首先…...

opencv dnn模块 示例(27) 目标检测 object_detection 之 yolov11

文章目录 1、YOLO v11 介绍1.1、改进点特性1.2、性能对比1.3、多任务支持 2、测试2.1、官方Python测试2.2、Opencv dnn测试2.3、测试统计 3、训练 1、YOLO v11 介绍 YOLO11是Ultralytics实时目标探测器系列中最新的迭代版本,重新定义尖端的精度、速度和效率。在以往…...

鸿蒙开发融云demo初始化和登录

鸿蒙开发融云IMKit初始化和登录 融云鸿蒙版是不带UI的,得自己一步步搭建。 下面说如何初始化和登录: 一、初始化: /*** desc : 初始化融云* author : congge on 2024-07-12 15:47**/public static initRongIm() {IMEngine.getInstance()…...

手机防窥膜的工作原理是怎样的?有必要使用防窥膜吗?

在信息高度发达的社会中,我们通过手机可以实现非常多的操作,同时手机中有存在许多我们的隐私信息,伴随使用手机的时间增多,手机中的信息也有可能被暴露,尤其是在公共场所旁人很容易通过瞥视你的手机屏幕获取到一些信息…...

【Python_PySide6学习笔记(三十九)】基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格

基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格 基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格前言1、实现要点1.1 继承和初始化1.2 定义textChanged的槽函数1.3 格式化逻辑1…...

23种设计模式口诀速记

设计模式的核心在于提供了相关问题的解决方案,使得人们可以更加简单方便的复用成功的设计和体系结构 23种设计模式,此处不举例,可以去看我上传的资源里面由详细汇总 口诀: 创建:想见员工丹 [抽象工厂、建造者(生成者…...

n > m 将输出文件 m 和 n 合并。 n < m 将输入文件 m 和 n 合并。 有什么区别

在你的描述中&#xff0c;似乎有一点误解。n >& m 和 n <& m 并不是用来合并文件的&#xff0c;而是用于重定向文件描述符&#xff08;file descriptors&#xff09;。让我澄清一下这两个命令的确切含义以及它们之间的区别。 n >& m —— 输出重定向 含…...

语言障碍在自闭症儿童中的表现及应对

自闭症儿童常常面临着语言障碍的困扰&#xff0c;这给他们的成长和发展带来了巨大挑战。 语言障碍在自闭症儿童中的表现形式多样。比如&#xff0c;有个叫小明的自闭症儿童&#xff0c;已经五岁了却还只会说一些简单的词语&#xff0c;如 “爸爸”“妈妈”“要” 等&#xff0c…...

(成功解决)ubuntu22.04不小心更新成了atzlinux12.7.1,右上角出现红色错误符号

文章目录 &#x1f315;问题&#x1f315;查看系统版本&#x1f315;为什么更新更成了atzlinux&#x1f315;通过修复依赖关系尝试解决右上角红色错误符号&#x1f315;把源换成ubuntu的源&#x1f315;删除atzlinux源和自定义的第三方源&#x1f315;重新创建/etc/os-release文…...

005 C#语言基本元素概览,初识类型,变量与方法

构成C#语言的基本元素 标记 &#xff1a;C#编译器可以识别的文本 关键字(Keyword)操作符(Operator)标识符(Identifier)标点符号文本注释和空白 简要介绍数据据类型、变量与方法 变量是存放数据的地方&#xff0c;简称数据 方法是处理数据的逻辑&#xff0c;简称算法 程序…...

Spring Cloud --- Sentinel 授权规则

授权规则概述 在某些场景下&#xff0c;需要根据调用接口的来源判断是否允许执行本次请求。此时就可以使用 Sentinel 提供的授权规则来实现&#xff0c;Sentinel 的授权规则能够根据请求的来源判断是否允许本次请求通过。 在 Sentinel 的授权规则中&#xff0c;提供了 白名单…...

计算机网络基础 - 传输层(1)

计算机网络基础 传输层概述多路复用与解复用概述解复用的工作原理无连接多路解复用面向连接的多路复用 无连接运输&#xff1a;UDP概述UDP 主要应用UDP 报文段结构 可靠数据传输的原理概述构建可靠数据传输协议经完全可靠信道的可靠数据传输&#xff1a;rdt1.0经具有比特差错信…...

Chrome DevTools:Console Performance 汇总篇

Chrome DevTools Chrome 开发者工具是一套 Web 开发者工具&#xff0c;直接内置于 Google Chrome 浏览器中。 开发者工具可以帮助您即时修改页面和快速诊断问题&#xff0c;最终帮助您更快地构建更好的网站。 一、开启 DevTools 右上角菜单 > 更多工具 > 开发者工具 页面…...

【Spark | Spark-Core篇】RDD行动算子action

使用转换算子是产生一个新的rdd&#xff0c;此时在driver端会生成一个逻辑上的执行计划&#xff0c;但任务还没有执行。但所谓的行动算子&#xff0c;其实就是触发作业执行的方法&#xff08;runJob&#xff09;。底层代码调用的是环境对象的runJob方法。 1. reduce 函数源码&…...

23.Redis核心数据结构

一、String(k-v) 字符串常规操作 备注 应用场景 SET key value 存入字符转键值对 单值缓存、对象缓存 MSET [key value, key value] 批量存储字符串键值对 对象缓存 SETNX key value 存入一个不存在的键值对 分布式锁 GET KEY 获取一个字符串键值 MGET [key,key,…...

免费送源码:Node.JS+Express+MySQL Express 流浪动物救助系统 计算机毕业设计原创定制

摘 要 随着互联网大趋势的到来&#xff0c;社会的方方面面&#xff0c;各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去&#xff0c;而其中最好的方式就是建立网络管理系统&#xff0c;并对其进行信息管理。由于现在网络的发达&#xff0c;流浪动物救助系…...

基于Java+Springboot+Vue开发的旅游景区管理系统

项目简介 该项目是基于JavaSpringbootVue开发的旅游景区管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Java的旅…...

Python 实现的风控系统(使用了kafka、Faust、模拟drools、redis、分布式数据库)

以下是一个使用 Python 实现的风控系统示例&#xff0c;涵盖以下技术组件&#xff1a; Kafka 消息中间件&#xff1a;用于实时接收支付业务系统传递的交易数据。Faust&#xff08;Kafka Streams 的 Python 等价&#xff09;&#xff1a;用于流式处理 Kafka 中的消息。规则引擎…...

Linux运维_Rocky8 安装配置Zabbix

Zabbix 是一个开源的监控解决方案&#xff0c;用于监控网络、服务器、应用程序和服务的性能。它提供实时监控、数据收集、告警通知以及图形化界面&#xff0c;方便用户查看和分析监控数据。Zabbix 支持多种数据收集方式&#xff0c;包括 SNMP、IPMI、JMX 和自定义脚本&#xff…...

jQuery Mobile 滚屏事件

jQuery Mobile 滚屏事件 在移动开发中,滚屏事件是一个非常重要的交互方式,它可以让用户通过滚动屏幕来浏览内容。jQuery Mobile 是一个流行的移动框架,它提供了一套丰富的组件和事件,使得在移动设备上实现滚屏效果变得简单。本文将详细介绍 jQuery Mobile 中的滚屏事件,包…...

3.1.1ReactOS系统中搜索给定长度的空间地址区间函数的实现

系列文章目录 //搜索给定长度的空间地址区间 MmFindGap&#xff08;&#xff09;&#xff1b; PMADDRESS_SPACE AddressSpace,//该进程用户空间 ULONG_PTR Length,//寻找的空间间隔大小 ULONG_PTR Granularity,//粒度位&#xff0c;表明空间起点的对齐要求&#xff0c;注意是起…...

arm64系统不支持32位的解决armel armhf

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

秦皇岛黄金海岸/武汉网站seo

本题要求将输入的任意3个整数从小到大输出。 输入格式: 输入在一行中给出3个整数&#xff0c;其间以空格分隔。 输出格式: 在一行中将3个整数从小到大输出&#xff0c;其间以“->”相连。 输入样例: 4 2 8输出样例: 2->4->8运行代码&#xff1a; #include<st…...

那些做电影视频网站的赚钱吗/西安seo服务公司排名

面试失败之后 在这之后的很长一段时间后&#xff0c;他没敢再去面试&#xff0c;觉得自己太丢人、技术太差不敢去谈论技术话题。后来他渐渐开始看网上的文章&#xff0c;知道要刷leetcode&#xff0c;看面经&#xff0c;然后之后一年多的时间&#xff0c;边上课&#xff0c;边…...

如何改善网站/著名的网络营销案例

2019独角兽企业重金招聘Python工程师标准>>> Redis Sentinel是一个分布式架构&#xff0c;包含若干个Sentinel节点和Redis数据节点&#xff0c;每个Sentinel节点会对数据节点和其余Sentinel节点进行监控&#xff0c;当发现节点不可达时&#xff0c;会对节点做下线标…...

网站建设需要哪些岗位/seo搜索方法

计算机上有一些唯一的标志符&#xff0c;比如网卡MAC地址&#xff0c;CPU序列号&#xff0c;硬盘序列等。有时候为了开发授权码或者注册码&#xff0c;需要根据具体计算机进行授权&#xff0c;这是就需要获取这些唯一标识信息了。 首先&#xff0c;是网卡MAC地址的获取。网卡其…...

浙浙江省建设信息港/seo关键词如何布局

2019独角兽企业重金招聘Python工程师标准>>> 我对一个String对象调用replaceAll(".","/") 本意是想将路径转换为URI格式,没想到调错了,导致整个String变成了// 后来才发现是应该调用replace(.,/) 前面那个方法按照正则解析的,我晕 转载于:https…...

怎么做淘宝客导购网站推广/seo网络优化师

第27卷第2期2010年2月机 械 设 计JOURNALOFMACHINEDESIGNVol.27No.2Feb.2010计算机辅助夹具设计技术回顾与发展趋势综述蔡瑾,段国林,姚涛,许红静(河北工业大学机械学院CAD/CAM研究所,天津 300130)3摘要:计算机辅助夹具设计(Computer2aidedfixturedesign,CAFD)技术从20世纪7…...