6、函数

75 阅读1分钟

本文为译文。原文地址:function

函数声明

func functionname(parametername type) returntype {  
 //function body
}

函数的参数和返回值是可选的,因此以下语法也是合理的

func functionname() {  
}

如果连续的参数具有相同的类型,我们只需要在最后一个参数定义一个类型即可。比如

func calculateBill(price, no int) int {  
    var totalPrice = price * no
    return totalPrice
}

多返回值

一个函数可能有多个返回值。如果一个函数返回多个返回值,那么其必须在()中声明。

package main

import (  
    "fmt"
)

func rectProps(length, width float64)(float64, float64) {  
    var area = length * width
    var perimeter = (length + width) * 2
    return area, perimeter
}

func main() {  
     area, perimeter := rectProps(10.8, 5.6)
    fmt.Printf("Area %f Perimeter %f", area, perimeter) 
}

命名返回值

有时可能从一个函数返回一个含有名称的返回值。如果一个返回值是有名称的,可以认为其在函数第一行被声明了一个变量。

func rectProps(length, width float64)(area, perimeter float64) {  
    area = length * width
    perimeter = (length + width) * 2
    return //no explicit return value
}

上面的函数中,area``perimeter是被命名的返回值。注意return里并没有明确的返回任何值。因为area``perimeter被指定为返回值,所以当遇到一个return时他们会被自动的从函数中返回。

空白标识符

在go中_是一个空白标识符。其可以被使用在任何值任何类型的地方。

package main

import (  
    "fmt"
)

func rectProps(length, width float64) (float64, float64) {  
    var area = length * width
    var perimeter = (length + width) * 2
    return area, perimeter
}
func main() {  
    area, _ := rectProps(10.8, 5.6) // perimeter is discarded
    fmt.Printf("Area %f ", area)
}

In line no. 13 we use only the area and the _ identifier is used to discard the perimeter.