第六篇 函数

欢迎来到Golang教程系列的第六篇

什么是函数

函数是执行一个特定任务的一块代码。函数接受输入,对输入执行一些计算,并生成输出。

函数声明

下面就是Go中声明函数的语法。

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

函数声明是以关键字func开始,接着是函数名称functionname。参数放在指定的()之间,然后接着是函数的返回类型returntype。指定参数的语法是,参数名后面跟着类型。有多个参数的话格式是(parameter1 type, parametere2 type),然后函数的主体代码块就在{}之间。

函数的参数和返回类型是可选的。因此,下面的函数声明的语法也是有效的。

func functionname(){
}

简单函数

下面我们写一个函数,接收产品的单价和产品的数量作为输入参数,通过累计价格来计算出总价,然后输出总价。

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

上面的函数输入两个int类型的参数priceno,返回产品价格和数量计算的totalPrice。返回值也是int类型。

如果连续的参数都是属于同一个类型,我们可以避免每次都写类型,只需要在末尾写出类型就够了。例如price int, no int可以写成price, no int,上面的函数就可以这么写。

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

现在,我们有一个函数,让我们在代码中调用这个函数。调用一个函数的语法是functionname(parameters),上面的函数可以用这个代码调用。

calculateBill(10,5)

这个就是上面函数输入总价的完整代码。

package main

import "fmt"

func calculateBill(price , no int) int {

	var totalPrice = price * no
	return totalPrice
}

func main() {

	price, no := 90, 6
	totalPrice := calculateBill(price, no)

	fmt.Println("total ptice is", totalPrice)

}

上面的程序会输出;

total ptice is 540

返回多个值

一个函数也可以有多个返回值。让我们写一个rectProps函数,接收矩形的lengthwidth作为输入参数,然后返回它的面积area和周长perimeter。矩形的面积area是它的长和宽的乘积,周长perimeter则是长和宽之和的两倍。

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)(float64, float64)有两个参数length和width,并且返回两个float64的值,上面的程序输出:

Area 60.480000 Perimeter 32.800000  

命名返回值

一个函数也可以命名它的返回值。如果要命名返回值,那就可以考虑在函数的第一行将它当作变量来声明。

上面的rectProps函数用命名返回值重写

func rectProps(length, width float)(area, perimeter float64) {
    area = length * width
    perimeter = (length + width) * 2
    return // 不需要显式地返回值
}

areaperimeter是上面函数返回值的命名,注意函数里面的返回语句不需要显式返回任何值。因为areaperimeter是函数声明中的指定返回值。当遇到返回语句时,它们就会在函数中自动返回。

空白标识符

_是Go中的空白标识符,它可以用来代替任何类型的任何值。接下来让我们看下如何使用空白标识符。

rectProps函数返回矩形的面积和周长,如果我们只需要面积area,而不需要周长perimeter是,这时,就可以使用_

下面的程序中,rectProps函数只返回了area

package main

import "fmt"

func rectProps(length, width float64)(area, perimeter float64) {

	area = length * width
	perimeter = (length + width) * 2

	return
}

func main() {

	area, _ := rectProps(10.8, 5.6)
	fmt.Printf("Area %f ", area)

}

在语句area, _ = rectProps(10,8, 5.6)中,我们只用了area和用_符号代替了
perimeter

以上就是本篇的全部,感谢阅读,这是我第一次翻译,难免会有翻译不当的地方,如果有什么反馈和评论,欢迎提出来!

原文地址: https://golangbot.com/functions/