go语言学习之旅之Go语言函数

学无止境,今天继续学习go语言的基础内容

Go语言函数

Go 语言函数定义格式如下

func function_name( [parameter list] ) [return_types] {函数体}

函数定义解析

  • func:函数由 func 开始声明

  • function_name:函数名称,函数名和参数列表一起构成了函数签名。

  • parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。

  • return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。

  • 函数体:函数定义的代码集合

在Go语言中,函数是一种重要的代码组织方式。以下是Go语言中定义和使用函数的基本知识:

函数定义

package mainimport "fmt"// 函数的定义
func add(x int, y int) int {return x + y
}// 函数可以返回多个值
func swap(x, y string) (string, string) {return y, x
}// 函数可以有命名返回值
func divide(dividend, divisor int) (result int, remainder int) {result = dividend / divisorremainder = dividend % divisorreturn
}// 可变参数函数
func sum(numbers ...int) int {total := 0for _, num := range numbers {total += num}return total
}func main() {// 调用函数sum := add(3, 4)fmt.Println("3 + 4 =", sum)// 调用返回多个值的函数a, b := swap("hello", "world")fmt.Println(a, b)// 调用有命名返回值的函数result, remainder := divide(10, 3)fmt.Printf("Result: %d, Remainder: %d\n", result, remainder)// 调用可变参数函数total := sum(1, 2, 3, 4, 5)fmt.Println("Sum:", total)
}

函数特性

  1. 参数传递: Go语言中的函数参数是传值的,但可以通过传递指针来实现引用传递。

  2. 多返回值: 函数可以返回多个值,这使得Go语言中处理错误信息变得更加方便。

  3. 命名返回值: 函数可以指定命名返回值,使得函数体内可以直接使用这些名称,最后通过return语句返回。

  4. 可变参数: 使用...语法,函数可以接受可变数量的参数。

  5. 匿名函数: 可以在函数内定义匿名函数,也可以将函数作为值赋给变量。

  6. 闭包: Go语言支持闭包,可以在函数内部定义函数,并访问外部函数的局部变量。

下面是一个示例,演示了匿名函数和闭包的使用:

package mainimport "fmt"func main() {// 匿名函数add := func(x, y int) int {return x + y}result := add(3, 4)fmt.Println("3 + 4 =", result)// 闭包multiplier := func(factor int) func(int) int {return func(x int) int {return x * factor}}// 创建两个闭包double := multiplier(2)triple := multiplier(3)// 使用 闭包fmt.Println("Double of 5:", double(5))fmt.Println("Triple of 5:", triple(5))
}

在Go语言中,闭包(closure)是指一个函数值(function value)捕获并且绑定到了其函数体之外的变量。这允许这个函数值访问捕获的变量,即使这些变量在函数体外部定义。

闭包通常用于实现函数式编程的概念,它可以让函数具有状态(通过捕获变量)并在函数之间共享这些状态。
在这个例子中,multiply 是一个外部函数,它返回一个内部函数。内部函数可以访问外部函数的参数 x,并且每个返回的内部函数都捕获了不同的值 x。当我们调用 multiply(2) 和 multiply(3) 创建两个闭包时,它们分别捕获了不同的 x 值,因此 double 和 triple 具有不同的行为。

闭包在许多场景中都很有用,例如在事件处理、回调函数和并发编程中。通过捕获变量,闭包可以在函数之间传递状态,这在某些情况下比传统的函数调用更为方便。

这些都是Go语言中函数的基本概念和用法。函数是Go语言中的一等公民,提供了丰富的功能和灵活性

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

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

相关文章

Me-and-My-Girlfriend-1

Me-and-My-Girlfriend-1 一、主机发现和端口扫描 主机发现,靶机地址192.168.80.147 arp-scan -l端口扫描,开放了22、80端口 nmap -A -p- -sV 192.168.80.147二、信息收集 访问80端口 路径扫描 dirsearch -u "http://192.168.80.147/" -e * …

浪潮信息云峦服务器操作系统KeyarchOS体验与实践

写在前面 大家好我是网络豆,一名云计算运维人员,本文将会带大家体验一下浪潮信息服务器操作系统云峦KeyarchOS。看看浪潮信息服务器操作系统云峦KeyarchOS的优势与实践操作如何。 背景了解 KeyarchOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术…

【Element】el-progress 自定义进度条

一、背景 要求弹窗内显示进度条&#xff0c;根据接口获取当前进度值&#xff0c;间隔5秒调用接口获取最新进度值&#xff0c;当进度值为100时&#xff0c;允许关闭进度条弹窗 二、效果 三、实现步骤 3.1、按钮绑定事件&#xff0c;打开弹窗 <el-button class"cance…

接入电商数据平台官方开放平台API接口获取商品实时信息数据,销量,评论,详情页演示

要接入电商数据平台官方开放平台API接口获取商品实时信息数据、销量、评论和详情页演示&#xff0c;需要按照以下步骤进行操作&#xff1a; 找到可用的API接口&#xff1a;首先&#xff0c;需要找到支持查询商品信息的API接口。可以在电商数据平台的官方开放平台上查找相应的AP…

python tkinter 使用

python tkinter 使用 ython可以使用多种GUI库来创建窗口页面&#xff0c;例如Tkinter、PyQt、wxPython等。 本篇文章主要讲述如何使用tkinter。 1&#xff1a;导入 import tkinter as tk这时如果运行的话会提示&#xff1a; ModuleNotFoundError: No module named ‘tkint…

JVM常见参数总结

JVM是Java应用程序的运行环境&#xff0c;它通过参数配置来控制其行为和性能。在JVM中&#xff0c;有很多参数可以用来调整其运行状态&#xff0c;这些参数可以帮助开发人员根据应用程序的需求进行优化和调整。在本次分享中&#xff0c;作者将介绍一些常见的JVM参数&#xff0c…

弄懂Rust编程中的Trait

1.定义 trait trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 trait 以一种抽象的方式定义共享的行为。可以使用 trait bounds 指定泛型是任何拥有特定行为的类型。 一个类型的行为由其可供调用的方法构成。如果可以对不同类型调用相同的方法的话&#xff…

机器人制作开源方案 | 莲花灯

1. 功能描述 莲花灯是一款基于莲花形象设计的机器人&#xff0c;本文示例将用两种模式来实现莲花灯的亮灭功能。 自主模式&#xff1a;用 光强传感器 控制莲花灯的灯叶开合。暗光情况下灯叶打开&#xff0c;灯亮&#xff1b;强光情况下灯叶闭合&#xff0c;灯灭。 …

webpack环境变量的设置

现在虽然vite比较流行&#xff0c;但对于用node写后端来说&#xff0c;webpack倒是成了一个很好的打包工具&#xff0c;可以很好的保护后端的代码。所以这块的学习还是不能停下来&#xff0c;接下来我们来针对不同的环境做不同的设置写好笔记。 引用场景主要是针对服务器的各种…

python模拟砍价源码详解

以下是一个简单的Python程序&#xff0c;模拟砍价的过程。这个程序假设原始价格是100元&#xff0c;每次砍价砍掉价格的10%&#xff1a; class Item:def __init__(self, original_price):self.original_price original_priceself.current_price original_pricedef bargain(s…

0时区格林威治时间转换手机当地时间-Android

假设传入的是2023-11-01T12:59:10.420987这样的格式 要将格式为2023-11-01T12:59:10.420987的UTC时间字符串转换为Android设备本地时间&#xff0c;您可以使用java.time包中的类&#xff08;在API 26及以上版本中可用&#xff09;。如果您的应用需要支持较低版本的Android&…

docker通过挂载conf文件启动redis

初衷&#xff1a;之前直接在启动脚本中没有挂载配置文件&#xff0c;并且直接设置了密码等&#xff0c;后续要使用集群&#xff0c;苦于无法修改配置&#xff0c;进入redis容器也找不到redis.conf&#xff0c;所以写这个文章用来使用redis的配置&#xff0c;来达到后续都可动态…

pdf转png工具类

pdf转图片的工具类 1、需要引入的包 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.4</version></dependency> 2、工具类 public static void main(String[] args) {Stri…

华为OD南京研究所二面手撕代码实录:乘电梯的最短时间

乘电梯的最短时间 某公司,每天早上都有很多人去坐电梯,每个人都可能到不同的楼层.同时电梯还有一个容量限制.电梯最多只能带K个人.电梯从第a层到第b层,会花费|a-b|的时间. 现在有N个人,以及知道每个人想要去的地方,请问如何坐电梯,才能使每个人到达到他们对应的楼层,且所花费时…

《微信小程序开发从入门到实战》学习二十四

3.3.12开发创建投票多选投票页面 创建投票多选投票页面和创建单选投票页面没有区别&#xff0c;唯一区别仅在于向服务端发送数据时&#xff0c;告诉服务器这个投票是什么类型的投票。这个类型用三种数据类型表示都可以&#xff0c;分别如下所示&#xff1a; multiple:true/fa…

Json数据格式

json比较可读&#xff0c;通过键值对返回。实现通常有两种方式:一种是自己来构造&#xff0c;也就是用一个对象存储数据&#xff0c;在最后输出时将其json字符串化&#xff1b;第二种是使用 RestController 注解实现json数据返回。 第一种 导入依赖坐标&#xff1a; <depe…

阿里 OSS鉴权访问文件

如果OSS文件设置保护&#xff0c;需要鉴权才能访问&#xff0c;添加请求头鉴权&#xff0c;SDK方法如上&#xff1b; 将鉴权信息和地址、时间返回给前端&#xff0c;前端直接从oss上读取 String filePath "/admin/2023/6/183569314928918546.png"; RequestMessage…

【C++上层应用】6. 信号 / 中断

文章目录 【 1. signal 函数 】【 2. raise函数 】 信号是由操作系统传给进程的 中断&#xff0c;会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上&#xff0c;可以通过按 CtrlC 产生中断。有些信号不能被程序捕获&#xff0c;但是下表所列信号可以在程序中捕…

Git——感谢尚硅谷官方文档

Git——尚硅谷学习笔记 第1章 Git 概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git 简史1.5 Git 工作机制1.6 Git 和代码托管中心 第2章 Git 安装第 3 章 Git 常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.4 添加暂存区3.4.1 将工作区的文…

sklearn模型中预测值的R2_score为负数

目录 正文评论区参考链接 正文 Sklearn.metrics下面的r2_score函数用于计算R&#xff08;确定系数&#xff1a;coefficient of determination&#xff09;。它用来度量未来的样本是否可能通过模型被很好地预测。 分值为 1 表示最好&#xff0c;但我们在使用过程中&#xff0c…