美文网首页
Go教程第六篇:函数

Go教程第六篇:函数

作者: 大风过岗 | 来源:发表于2019-12-10 14:21 被阅读0次

本文是《Go系列教程》的第六篇文章。

什么是函数?

函数是执行指定任务的代码块。接收输入,对输入执行运算,生成输出结果。

函数声明

在go里面,通常声明函数的语法是:

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

函数声明以一个func关键字开始,后面紧跟着是函数名。然后在(和)之间指定参数,最后是函数的返回值类型。
指定函数参数的语法是: 参数名 类型。不管几个参数都可以这样指定:(parameter1 type,parameter2 type)
之后,由{和}包裹的代码块就是函数体。

对于函数来说,参数和返回值类型都是可选的。因此,下面的语法也是一个有效的函数声明。

func functionname() {
}

简单函数

我们来一起写个接收商品单价和商品数量作为参数,并计算出总数额的函数。

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

上面的函数有俩个int类型的输入参数:price和no,并返回总价格totalprice。返回值的类型也是int。

如果连续几个参数都是同一种数据类型的话,我们可以不必每次都写类型,我们只需要在最后的参数后面写一次就行了。
ie: 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 price is", totalPrice)
}

上面的程序会输出如下:

Total price is 540

多返回值

函数可以返回多个值。现在我们写一个函数rectProps,这个函数会接收一个矩形的长度和宽度,
然后返回面积和周长。面积是矩形长和宽的乘积,周长是长和宽的和的二倍。

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)
}

如果一个函数需要返回多个值的话,那么这些返回值一定要使用(和)指定。ie:func rectProps(length, width float64)(float64, float64)
函数rectProps接收了俩个float64类型的参数,同时返回了俩个float64的值。上面的程序会输出如下:

Area 60.480000 Perimeter 32.800000

命名返回值

函数也能返回命名值。如果返回值是命名的,那么你可以在函数的第一行像变量一样对它进行声明。
上面的rectProps函数可以使用命名返回值进行重写:

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

area和perimeter是命名返回值。注意: 上面函数中的返回语句并没有明确地返回任何值。
因为 area和perimeter在函数的声明处,已经作为返回值进行声明了,所以当执行到return语句时,
他们会自动地从函数中返回。

空格标识符

_ 在Go里面被认为是空格标识符。它可以被用于任何类型的值里面。

rectProps函数返回了矩形的面积和周长。如果我们只需要面积area,而不需要周长perimeter
的话,这时候_就派上用场了。

下面的程序只从rectProps函数中返回面积area。

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)
}

在13行,我们仅仅需要面积area的值,所以我们使用area来接收参数,同时使用"_"来丢弃另一个参数。

致谢

感谢您百忙之中阅读本文。如果有任何反馈和问题,请您在评论区留言。

备注

本文系翻译之作原文博客地址

相关文章

  • Go教程第六篇:函数

    本文是《Go系列教程》的第六篇文章。 什么是函数? 函数是执行指定任务的代码块。接收输入,对输入执行运算,生成输出...

  • Golang学习笔记-1.6 函数

    本文系第六篇Golang语言学习教程 声明函数 语法 函数声明包括:函数名name:自定义的函数名形式参数列表()...

  • 【轻知识】Go入门学习整理——第三节(函数、struct、封装、

    函数 Go只有值传递Go函数返回值的两种写法。 这个其实没太多要说的。有的教程提到了面向函数范式编程(functi...

  • go语言学习资料

    菜鸟教程-Go 语言教程 https://www.runoob.com/go/go-tutorial.html老男...

  • Golang命令

    Go命令教程 (访问密码:kmNYam)Go命令教程 go buildgo build命令用于编译我们指定的源码文...

  • 三、Go的函数

    三、Go的函数 Go语言最少有一个main()函数。 1、Go的函数定义: 2、函数参数 函数如果使用参数,该变量...

  • Golang学习笔记-1.4 数据类型

    本文系第四篇Golang语言学习教程在Go语言中,数据类型用于声明函数和变量。Go语言按类别有以下几种数据分类 b...

  • Go并发调度

    本文是《循序渐进Go语言》的第六篇-Go并发调度。本文是学习《Go语言学习笔记》的并发调度一章,然后结合阅读源码的...

  • 第02天(函数、工程管理)_03

    11_函数类型.go 12_回调函数.go 13_匿名函数和闭包.go 14_闭包捕获外部变量的特点.go 15_...

  • Golang学习笔记-函数

    Go函数定义格式如下: 例如: Go可以很灵活的创建函数,并作为另外一个函数的实参: Go支持匿名函数,可作为闭包...

网友评论

      本文标题:Go教程第六篇:函数

      本文链接:https://www.haomeiwen.com/subject/mghggctx.html