函数

2018-05-26  本文已影响0人  __apple

今天我们就来说说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函数中我们就用可变参数列表,实现了其他语言中一部分可变参数的功能,怎么样你学会了嘛。如果同学们碰到了哪里不懂的,可以在我们的群里面追问,谢谢大家!!!!!

上一篇 下一篇

猜你喜欢

热点阅读