本文为译文。原文地址: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.