函数

函数

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

这是本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

相关推荐

  • lp

    文章目录lp补充说明语法选项参数实例 lp 打印文件或修改排队的打印任务 补充说明 lp命令 用于打印文件,或者修改排队的打印任务。与lpr命令类似,lp命令既支持文件输入也支持标…

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

    针对Kubernetes的Helm包管理器。 文章目录简介可选项另请参阅 简介 Kubernetes包管理器 Helm的一般操作: helm search:   搜索chart h…

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

    文章目录clock补充说明语法选项实例 clock 用于调整 RTC 时间 补充说明 clock命令用于调整 RTC 时间。 RTC 是电脑内建的硬件时间,执行这项指令可以显示现在…

    入门教程 2023年 12月 7日
  • xlsatoms

    文章目录xlsatoms补充说明语法选项 xlsatoms 列出X服务器内部所有定义的原子成分 补充说明 xlsatoms命令 用于列出X服务器内部所有定义的原子成分,每个原子成分…

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

    文章目录pathchk补充说明语法选项参数 pathchk 检查文件中不可移植的部分 补充说明 pathchk命令 用来检查文件中不可移植的部分。 语法 pathchk(选项)(参…

    入门教程 2024年 3月 1日
  • iptables

    文章目录iptables补充说明语法选项基本参数命令选项输入顺序工作机制防火墙的策略实例清空当前的所有规则和计数配置允许ssh端口连接允许本地回环地址可以正常使用设置默认的规则配置…

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

    文章目录parted补充说明语法选项参数实例 parted 磁盘分区和分区大小调整工具 补充说明 parted命令 是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与…

    入门教程 2024年 3月 1日
  • write

    文章目录write补充说明语法参数实例 write 向指定登录用户终端上发送信息 补充说明 write命令 用于向指定登录用户终端上发送信息。通过write命令可传递信息给另一位登…

    入门教程 2024年 1月 3日
  • 变量

    文章目录变量什么是变量声明单一变量声明一个带初值的变量类型推导多变量声明简短声明 变量 上一节:第二篇 Hello World下一节:第四篇 类型 这是本Golang系列教程的第三…

    2023年 12月 5日
  • pwconv

    文章目录pwconv补充说明语法实例 pwconv 用来开启用户的投影密码 补充说明 pwconv命令 用来开启用户的投影密码。Linux系统里的用户和群组密码,分别存放在名称为p…

    入门教程 2024年 3月 1日

发表回复

登录后才能评论
Translate »