今天我们就来说说Go语言中函数的定义方式,几乎所有的语言都有函数,所以我在这里认为大家有一种编程语言的经验了,什么形参什么虚参什么是返回值,这些概念就不给大家一一介绍了,如果不懂的同学可以私下找我, 我给你但讲。。。在这里给大家补充一个,方法与函数的区别,因为在java中基本都是叫方法,Pyhton基本有函数与方法这两个称呼,Go中没有对象的概念所以他只有函数这个叫法,那么这两种说法分别代表什么意思?其实它俩是一样的,如果你非要纠结说一下不同那么
- 方法:设计层面
- 函数:程序运行、过程式的称谓
ok,关于函数的前奏就讲那么多,我们直接上一段Go的函数
func test(a ,b int, op string) int
函数的定义是乎与变量的定义是一样的,都是类型在后,名称在前
上面的test函数有点简单了,我们来点复杂点的
func eval(a, b int, op string) (int, error) {
switch op {
case "+":
return a + b, nil
case "-":
return a - b, nil
case "*":
return a * b, nil
case "/":
q, _ := div(a, b)
return q, nil
default:
return 0, fmt.Errorf(
"unsupported operation: %s", op)
}
}
这里需要注意的是eval函数接受两个参数, 一个是int, 一个是error 关于这个error呢我们前几节讲过了,这是Go的一种特殊的用法
我们再来一个数学计算
func div(a, b int) (q, r int) {
return a / b, a % b
}
div函数就是一个整除与求余的函数,这个函数的返回值,可以公用一个int,是不是还不错呢!!!
从这几个函数中,我们基本就能得到一些Go函数的共有特征
- 函数返回值可以起多个名字
- 但是这种仅限于非常简单的函数
- 对于调用者而言没有任何区别
其实函数还可以作为参数,可以作为返回值。
举个例子给同学们看一下
func apply(op func(int, int) int, a, b int) int {
return op(a, b)
}
apply 函数有三个参数一个int返回值,里面的op 类型是一个匿名函数它有两个参数一个int返回值。
Go里面的参数没有可变参数、操作符重载、函数重载这些概念,但是我们可以通过一些特殊的方式,实现这些功能,比如今天我们讲可变参数在Go中怎么操作。
我们来计算1加到100
func sum(numbers ...int) int {
s := 0
for i := range numbers {
s += numbers[i]
}
return s
}
在sum函数中我们就用可变参数列表,实现了其他语言中一部分可变参数的功能,怎么样你学会了嘛。如果同学们碰到了哪里不懂的,可以在我们的群里面追问,谢谢大家!!!!!
网友评论