【golang函数笔记】

目录

  • 01定义和调用函数
    • 1. 函数的参数
    • 2. 函数的返回值
    • 3. 函数的变参
    • 4. 匿名函数

Golang是一种支持函数式编程的语言,它的函数具有以下特点:

  1. 函数是一等公民:函数可以作为参数传递给其他函数,也可以作为返回值返回给调用者。

  2. 支持多返回值:函数可以返回多个值,这些值可以是不同类型的。

  3. 支持匿名函数:Golang支持定义匿名函数,这些函数可以像普通函数一样被调用。

01定义和调用函数

下面是一个简单的示例代码,展示了如何在Golang中定义和调用函数:

package mainimport "fmt"// 定义一个名为add的函数,接收两个整数类型的参数,返回它们的和
func add(a, b int) int {return a + b
}func main() {// 调用add函数,并将返回值赋值给变量sumsum := add(1, 2)// 输出sum的值fmt.Println(sum)
}

代码解释:

  1. 第1行定义了一个名为main的包,这是Golang程序的入口点。

  2. 第3行导入了fmt包,该包提供了格式化输入输出的功能。

  3. 第5行定义了一个名为add的函数,它接收两个整数类型的参数a和b,返回它们的和。

  4. 第9行开始执行main函数,调用add函数并将返回值赋值给变量sum。

  5. 第11行输出sum的值。

接下来,我们将进一步探讨Golang中函数的相关知识点。

1. 函数的参数

函数的参数可以是任意类型,包括基本类型、结构体、数组、切片、映射、函数等。在Golang中,函数的参数可以有多个,它们之间用逗号分隔。

示例代码:

package mainimport "fmt"// 定义一个名为add的函数,接收两个整数类型的参数,返回它们的和
func add(a, b int) int {return a + b
}// 定义一个名为printPerson的函数,接收一个结构体类型的参数,输出该结构体的信息
func printPerson(person struct {name stringage  int
}) {fmt.Printf("Name: %s, Age: %d\n", person.name, person.age)
}func main() {// 调用add函数,并将返回值赋值给变量sumsum := add(1, 2)// 输出sum的值fmt.Println(sum)// 定义一个名为p的结构体变量p := struct {name stringage  int}{name: "Tom",age:  20,}// 调用printPerson函数,输出p的信息printPerson(p)
}

代码解释:

  1. 第5行定义了一个名为add的函数,它接收两个整数类型的参数a和b,返回它们的和。

  2. 第8行定义了一个名为printPerson的函数,它接收一个结构体类型的参数person,输出该结构体的信息。

  3. 第22行定义了一个名为p的结构体变量。

  4. 第25行调用printPerson函数,将p作为参数传入。

2. 函数的返回值

函数可以返回一个或多个值,这些值可以是不同类型的。在Golang中,函数的返回值可以在函数定义时指定,也可以在函数体中使用return语句返回。

示例代码:

package mainimport "fmt"// 定义一个名为swap的函数,接收两个整数类型的参数,返回它们的值交换后的结果
func swap(a, b int) (int, int) {return b, a
}func main() {// 调用swap函数,并将返回值赋值给变量x和yx, y := swap(1, 2)// 输出x和y的值fmt.Println(x, y)
}

代码解释:

  1. 第5行定义了一个名为swap的函数,它接收两个整数类型的参数a和b,返回它们的值交换后的结果。

  2. 第9行开始执行main函数,调用swap函数并将返回值分别赋值给变量x和y。

  3. 第11行输出x和y的值。

3. 函数的变参

Golang中的函数可以接收变长参数,这些参数的数量可以是任意的。在函数定义时,可以使用…语法来表示变长参数。

示例代码:

package mainimport "fmt"// 定义一个名为sum的函数,接收任意数量的整数类型参数,返回它们的和
func sum(nums ...int) int {total := 0for _, num := range nums {total += num}return total
}func main() {// 调用sum函数,传入任意数量的参数fmt.Println(sum(1, 2, 3, 4, 5))fmt.Println(sum(1, 2, 3))fmt.Println(sum(1, 2))fmt.Println(sum(1))fmt.Println(sum())
}

代码解释:

  1. 第5行定义了一个名为sum的函数,它接收任意数量的整数类型参数nums,返回它们的和。

  2. 第9-12行使用for循环遍历nums中的每个元素,并将它们累加到变量total中。

  3. 第14行开始执行main函数,分别调用sum函数,传入不同数量的参数,并输出它们的和。

  4. 第15-19行分别输出不同数量参数的和。

4. 匿名函数

Golang支持定义匿名函数,这些函数可以像普通函数一样被调用。匿名函数可以作为参数传递给其他函数,也可以作为返回值返回给调用者。

示例代码:

package mainimport "fmt"func main() {// 定义一个匿名函数,并将它赋值给变量ff := func(a, b int) int {return a + b}// 调用匿名函数,并将返回值赋值给变量sumsum := f(1, 2)// 输出sum的值fmt.Println(sum)
}

代码解释:

  1. 第6行定义了一个匿名函数,并将它赋值给变量f。

  2. 第9行调用匿名函数,并将返回值赋值给变量sum。

  3. 第11行输出sum的值。

以上就是Golang中函数相关知识的简单介绍和示例代码,希望对您有所帮助。

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

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

相关文章

怎么用PDF24 Tools工具在线进行PDF文件合并

PDF文件是经常会被用到,它在我们的日常生活和工作中扮演着重要的角色。PDF文件合并是将多个PDF文件合并为单个文件,这个过程通常是为了方便管理多个PDF文件,或者将多个PDF文件合并为一个整体以便于共享或打印。既然如此,如何快速合…

kotlin forEach循环return/break

kotlin forEach循环return/break fun main(args: Array<String>) {var a mutableListOf("0", "1", "2", "3", "4")var b mutableListOf<String>()a.forEachIndexed { index, s ->if (index > 2) {retu…

【Mac使用笔记】之 Homebrew

Homebrew更新&#xff1a; brew update && brew upgrade 当出现错误&#xff1a; fatal: couldnt find remote ref refs/heads/master 执行&#xff1a; brew tap --repair Ruby安装&#xff1a; 1、查看当前Homebrew版本&#xff1a; brew --version2、查看当前…

libbpf-bootstrap 开发指南:概念与如何安装

目录 概念 如何安装& 使用 git 地址 使用git clone 下载代码 安装依赖环境 安装libbpf 编译example 概念 libbpf-bootstrap 是一个项目&#xff0c;旨在帮助开发者快速启动和开发使用 eBPF (Extended Berkeley Packet Filter) 和 libbpf 的程序。eBPF 是一种可以在…

TTX1994-可调谐激光器控制系统

花了两周时间&#xff0c;利用下班时间&#xff0c;设计了一个ITLA可调谐激光器控制系统&#xff0c;从硬件到软件。下面这个图片整套硬件系统&#xff0c;软件硬件都自己设计&#xff0c;可以定制&#xff0c;做到单片机问题也不大。相当于一套光源了 这是软件使用的界面&…

Kafka 概述、Filebeat+Kafka+ELK

Kafka 概述、FilebeatKafkaELK 一、为什么需要消息队列&#xff08;MQ&#xff09;1、使用消息队列的好处2、消息队列的两种模式 二、Kafka 定义1、Kafka 简介2、Kafka 的特性3、Kafka 系统架构 三、部署 kafka 集群1.下载安装包2.安装 Kafka3.Kafka 命令行操作 四、Kafka 架构…

基于linux串口实现语音刷抖音

目录 1.开发逻辑图及模块 2.编程实现语音和开发板通信 3.手机接入Linux热拔插相关,打开手机开发者模式允许USB调试 4.用shell指令来操作手机屏幕&#xff0c;模拟手动滑屏幕 5.最终主程序代码 1.开发逻辑图及模块 逻辑图&#xff1a; 模块 &#xff08;1&#xff09;语音…

【深入浅出C#】章节5:高级面向对象编程:委托和事件

委托和事件是高级面向对象编程中的重要概念&#xff0c;用于实现程序的灵活性、可扩展性和可维护性。它们在实现回调、事件处理和异步编程等方面发挥着关键作用。 委托允许我们将方法视为一种对象&#xff0c;可以将方法作为参数传递、存储在变量中&#xff0c;并在需要时进行调…

运维小知识(二)——Linux大容量磁盘分区及挂载

centos系统安装&#xff1a;链接 目录 1.&#x1f353;&#x1f353;命令格式化磁盘 2.&#x1f353;&#x1f353;大容量硬盘分区 3.&#x1f353;&#x1f353;自动挂载 整理不易&#xff0c;欢迎一键三连&#xff01;&#xff01;&#xff01; 新系统装完之后&#xff0…

C语言图书管理系统

一&#xff0c;开发环境 操作系统&#xff1a;windows10, windows11, linux, mac等。开发工具&#xff1a;Qt, vscode, visual studio等开发语言&#xff1a;c 二&#xff0c;功能需求 1. 图书信息管理&#xff1a; 这个功能的主要任务是保存和管理图书的所有信息。这应该包…

数据库多表查询作业

数据库多表查询作业 创建数据库 插入数据 mysql> insert into student values(901,张老大,男,1985,计算机系,北京市海淀区),-> (902,张老二,男,1986,中文系,北京市昌平市),-> (903,张三,女,1990,中文系,湖南省永州市), -…

opencv实战--角度测量和二维码条形码识别

文章目录 前言一、鼠标点击的角度测量二、二维码条形码识别 前言 一、鼠标点击的角度测量 首先导入一个带有角度的照片 然后下面的代码注册了一个鼠标按下的回调函数&#xff0c; 还有一个点的数列&#xff0c;鼠标事件为按下的时候就记录点&#xff0c;并画出点&#xff0c;…

黑马程序员-大数据入门到实战-前置章节

文章目录 1. 环境介绍2. VMware准备虚拟机3. VMware虚拟机系统设置3.1 主机名、IP、SSH免密登录3.1.1 配置固定IP地址3.1.2 配置主机名映射3.1.3 配置SSH免密登录3.1.4 创建hadoop用户并配置免密登录 3.2 JDK环境部署3.2.1 配置JDK环境 3.3 防火墙、SELinux、时间同步3.3.1 关闭…

【软件测试】Git 远程仓库的使用(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 查看远程仓库 想…

SQL性能规范

一、随聊 记录一下吧&#xff0c;2023年7月13日00:11:11&#xff0c;现在的状态真的很&#xff0c;忙&#xff0c;干不完的活&#xff0c;希望巨大的压力&#xff0c;能够让自己快速成长&#xff0c;回想我这一路&#xff0c;21年大专毕业&#xff0c;用一年时间熟悉软件&…

STM32 Proteus仿真医用仓库环境控制系统紫外线消毒RS232上传CO2 -0066

STM32 Proteus仿真医用仓库环境控制系统紫外线消毒RS232上传CO2 -0066 Proteus仿真小实验&#xff1a; STM32 Proteus仿真医用仓库环境控制系统紫外线消毒RS232上传CO2 -0066 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 LCD1602显示器DHT11温度湿度电位器模拟…

golang中的【数组】相关知识点

目录 数组含义数组定义形式数组的声明初始化方式数组变量的类型 arr的特征数组的遍历遍历的用法二数组的值传递数组的引用&取地址 传送二维数组的相关操作定义二维数组初始化遍历 Golang是一种高效的编程语言&#xff0c;具有很多特性和优点&#xff0c;其中之一就是其对数…

python 小案例25

要使用Django开发一个抽奖活动的后台&#xff0c;需要进行以下步骤&#xff1a; 安装Django&#xff1a;首先确保已经安装了Python和pip&#xff0c;然后使用pip安装Django库&#xff1a; pip install django 创建Django项目&#xff1a;在命令行中执行以下命令创建一个新的Dja…

RNN、LSTM、Seq2Seq

目录 时间序列表示梯度弥散和梯度爆炸RNN&#xff08;循环神经网络&#xff09;LSTMSeq2SeqELMo 时间序列表示 核心是加入历史信息去预测下一步骤 在NLP中&#xff0c;序列维度一般是这个样子:[b,seq_len,feature_len] b个句子&#xff0c;每个句子seq_len个单词&#xff0c;…

【复习10-12天内容】【我们一起60天准备考研算法面试(大全)-第十四天 14/60】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…