Golang函数详解:多返回值、匿名函数与闭包
83 浏览量
更新于2024-09-02
收藏 61KB PDF 举报
"这篇Golang学习笔记主要涵盖了函数的各个方面,包括基本语法、多返回值、命名返回参数、参数传递的传值与传指针、可变参数、匿名函数、函数作为值以及函数的类型等内容。它旨在帮助读者深入理解Go语言中的函数用法和特性。"
在Go语言中,函数是通过`func`关键字来声明的。基本语法包括定义函数名称、输入参数列表和返回值。例如:
```go
func funcName(inputType1 input1, inputType2 input2) (outputType1 output1, outputType2 output2) {
// 逻辑代码
return value1, value2
}
```
函数可以接受零个或多个参数,每个参数都有其特定的类型,并且由逗号分隔。返回值部分可以声明一个或多个返回值,如果返回值类型相同,可以省略声明。例如:
```go
// 一般函数
func func_name(a int) {
println(a)
}
// 多参数,无返回值
func func_name(a, b int, c string) {
println(a, b, c)
}
// 单个返回值
func func_name(a, b int) int { // 同类型,可以省略a, b int
return a + b
}
// 多个返回值
func func_name(a, b int) (int, error) { // 返回值可以是(int, error)
return a + b, nil
}
```
Go函数不支持函数嵌套、重载(即不同参数列表的同名函数)和默认参数。然而,它有以下特点:
1. 无需声明函数原型:Go语言允许直接定义并使用函数,无需预先声明。
2. 不定长度变参:使用`...`操作符可以接受可变数量的参数,如`func variadicFunc(args ...int)`。
3. 多返回值:函数可以返回多个结果,不同于某些语言的元组,Go中直接通过逗号分隔返回。
4. 命名返回值参数:可以为返回值指定名称,使得返回值在函数体内部可作为局部变量使用,同时简化`return`语句。
5. 匿名函数:没有函数名称的函数,常用于作为其他函数的参数或立即执行。
6. 闭包:匿名函数可以访问并修改其所在作用域的变量,形成闭包。
在多返回值中,可以使用下划线`_`忽略不需要的返回值。对于命名返回值,如果在`return`语句中未显式指定返回值,将按变量名顺序返回。例如:
```go
package main
import "fmt"
func divide(a, b int) (result int, err error) {
if b == 0 {
err = fmt.Errorf("除数不能为零")
return
}
result = a / b
return
}
func main() {
res, _ := divide(10, 2) // 忽略错误
fmt.Println(res)
_, err := divide(10, 0) // 仅接收错误
fmt.Println(err)
}
```
函数的可见性规则规定,以小写字母开头的函数仅在本包内可见,而大写字母开头的函数可以被其他包调用,这符合Go的导出规则。
Go语言的函数机制提供了丰富的功能,如多返回值和命名返回参数,使得编写简洁、高效的代码成为可能。理解和熟练运用这些特性是掌握Go编程的关键步骤。
103 浏览量
2019-09-20 上传
点击了解资源详情
2020-09-19 上传
点击了解资源详情
点击了解资源详情
2020-09-22 上传
2021-01-21 上传
2014-04-01 上传
weixin_38728624
- 粉丝: 4
- 资源: 881
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库