函数
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-09-21订单系统资料入门教程:轻松管理你的订单
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java订单系统资料:新手入门教程与实战指南
- 2024-09-21Java管理系统资料入门教程
- 2024-09-21从零开始学习Java监控系统资料
- 2024-09-21Java就业项目资料:新手入门的必备教程
- 2024-09-21Java全端资料:初学者指南
- 2024-09-21Java全栈资料入门教程及资源汇总
- 2024-09-21Java日志系统资料入门教程