函数
2021/10/23 6:11:23
本文主要是介绍函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
七、函数
函数是基本的代码块,用于执行一个任务。
Go 语言至少有一个入口main() 函数。
1 函数定义
函数定义的格式如下:
func function_name( [parameter list] ) [return_types] { 函数体 } // 函数的作用范围就在大括号之间{}
函数定义解析:
- func:函数由 func 开始声明
- function_name:函数名称,参数列表和返回值类型构成了函数签名。
- parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。声明一个参数的语法采用 参数名 参数类型 的方式,多个参数的声明用逗号隔开。
- return_types:返回类型,规定了函数的返回值类型return_types。有些功能不需要返回值,这种情况下 return_types 不是必须的。
- 函数体:函数定义的代码集合。
举例:
// 定义一个函数 func max(a,b int) int { //如果有连续若干个参数,它们的类型一致,那么我们无须一一罗列,只需在最后一个参数后添加该类型。 ret := a if a>b{ fmt.Println("a比b大") }else if a==b { fmt.Println("a等于b") }else { fmt.Println("b比a大") ret = b } return ret }
2 函数调用
调用函数,(如果需要参数)向函数传递参数,(如果有返回值)并得到返回值,例如:
func main() { ret := max(10,20) // 调用函数,得到返回值 fmt.Println(ret) }
得到输出:b比a大\n20
3 其它
调用函数,可以通过两种方式来传递参数:值传递和引用传递。
默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。
Go 语言支持一个函数可以有多个返回值。如果一个函数有多个返回值,那么这些返回值必须用括号括起来。
func swap(x, y string) (string, string) { //这些返回值必须用括号括起来 return y, x } func main() { a, b := swap("Google", "baidu") fmt.Println(a, b) }
还可以在定义的时候命名返回值,从函数中可以返回一个命名值。
func rectProps(length, width float64)(area, perimeter float64) { area = length * width perimeter = (length + width) * 2 return // 不需要明确指定返回值,默认返回 area, perimeter 的值 } /*请注意, 函数中的 return 语句没有显式返回任何值。由于 area 和 perimeter 在函数声明中指定为返回值, 因此当遇到 return 语句时, 它们将自动从函数返回。*/
下划线_
在 Go 中被用作空白符,可以用作表示任何类型的任何值。
func swap(x, y string) (string, string) { return y, x } func main() { a, _ := swap("Google", "baidu") // 空白符_ 用来跳过不想要的返回结果 fmt.Println(a) }
4 函数作为另外一个函数的实参
Go 语言可以很灵活的创建函数,并作为另外一个函数的实参。
func square(a int) int { return a*a } func swap(a,b int) (int,int){ return b,a } func main() { reta,retb := swap(20,square(5)) fmt.Println(reta,retb) }
5 闭包和匿名函数
Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。
func getSequence() func() int { i:=0 return func() int { i+=1 return i } } func main(){ /* nextNumber 为一个函数,函数 i 为 0 */ nextNumber := getSequence() /* 调用 nextNumber 函数,i 变量自增 1 并返回 */ fmt.Println(nextNumber()) fmt.Println(nextNumber()) fmt.Println(nextNumber()) /* 创建新的函数 nextNumber1,并查看结果 */ nextNumber1 := getSequence() fmt.Println(nextNumber1()) fmt.Println(nextNumber1()) }
以上代码执行结果为:
1 2 3 1 2
这篇关于函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-29开源工具的魅力:让文档管理更“聪明”
- 2024-11-29Release-it开发入门教程
- 2024-11-29Rollup 插件入门教程:轻松掌握模块打包
- 2024-11-29从零到一,产品经理如何玩转项目管理和团队协作
- 2024-11-29如何通过精益生产管理工具帮助项目团队实现精准进度控制?
- 2024-11-29低代码应用开发课程:新手入门与基础教程
- 2024-11-29入门指南:全栈低代码开发课程
- 2024-11-29ESLint课程:初学者快速上手指南
- 2024-11-29JWT课程:新手入门教程
- 2024-11-29高效办公秘诀:文档管理中的可视化革命