函数

函数

上一节:第五篇 常量
下一节:第七篇 包

这是本Golang系列教程的第6篇。

什么是函数?

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

函数声明

在 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 类型的输入参数:priceno,并返回 totalPriceprice no 的乘积)。返回值的类型也是 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)  

下面是完整的程序,它调用 calculateBill 并计算总价格。

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,它接受一个矩形的长和宽,并返回该矩形的面积和周长。矩形的面积为长与宽的积。周长为长与宽的和的 2 倍。

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) 接受两个类型为 float64 的参数(lengthwidth),并且同样返回两个类型为 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 是具名返回值。注意 return 语句没有指定任何返回值。因为在函数声明时已经指定 areaperimeter 是返回值,在遇到 return 语句时它们会自动从函数中返回。

(译者注:在Go中,有返回值的函数,无论是具名返回值还是普通形式的返回值,函数中必须包含 return 语句。)

空指示符

下划线_表示空指示符blank identifier。它可以用于代替任何类型的任何值。让我们看看如何使用空指示符。

我们知道上面定义的函数 rectProps 返回矩形的面积area和周长perimeter。如果我们只需要获取 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)
}

area, _ := rectProps(10.8, 5.6) 这一行,我们仅仅获取了 area,而使用空指示符 _来忽略第二个返回值perimeter

若文章对你有帮助,可以点赞或打赏支持我们。发布者:Aurora,转载请注明出处:http://61.174.243.28:13541/AY-knowledg-hub/6-%e5%87%bd%e6%95%b0/

(1)
AuroraAurora站点维系者
上一篇 2023年 12月 5日 下午6:05
下一篇 2023年 12月 5日 下午6:07

相关推荐

  • fold

    文章目录fold补充说明语法选项参数示例 fold 控制文件内容输出时所占用的屏幕宽度 补充说明 fold命令 用于控制文件内容输出时所占用的屏幕宽度。fold命令会从指定的文件里…

    入门教程 2023年 12月 14日
  • YAML 入门教程

    YAML 是 YAML Ain\’t a Markup Language(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:Yet A…

    2023年 5月 18日
  • locate

    文章目录locate补充说明语法选项实例 locate 比 find 好用的文件查找工具 补充说明 locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立…

    入门教程 2023年 12月 19日
  • split

    文章目录split补充说明选项实例 split 分割任意大小的文件 补充说明 split命令 可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,…

    入门教程 2024年 3月 5日
  • lpc

    文章目录lpc补充说明语法实例 lpc 命令行方式打印机控制程序 补充说明 lpc命令 式命令行方式打印机控制程序,有5个内置命令。 语法 lpc 实例 [root@localho…

    入门教程 2023年 12月 19日
  • ssh

    文章目录ssh补充说明语法选项参数实例背后故事将 SSH 协议端口号设为 22 的故事如何更改 SSH 服务的端口号配置 SSH 协议穿越防火墙出站的 SSH 连接反向通道是有风险…

    入门教程 2024年 3月 11日
  • pwck

    文章目录pwck补充说明语法选项参数实例 pwck 用来验证系统认证文件内容和格式的完整性 补充说明 pwck命令 用来验证系统认证文件/etc/passwd和/etc/shado…

    入门教程 2024年 3月 1日
  • SQL 简介

    SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模…

    2023年 5月 28日
  • e2fsck

    文章目录e2fsck补充说明语法选项参数实例 e2fsck 用于检查第二扩展文件系统的完整性 补充说明 e2fsck命令 用于检查第二扩展文件系统的完整性,通过适当的选项可以尝试修…

    入门教程 2023年 12月 14日
  • chgrp

    文章目录chgrp补充说明语法选项参数实例 chgrp 用来变更文件或目录的所属群组 补充说明 chgrp命令 用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。…

    入门教程 2023年 12月 7日

发表回复

登录后才能评论
Translate »