函数

函数

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

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

相关推荐

  • zcat

    文章目录zcat补充说明语法选项参数 zcat 显示压缩包中文件的内容 补充说明 zcat命令 用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。 语法 zcat(选项)(参…

    入门教程 2024年 3月 11日
  • Helm | Helm 包

    文章目录helm package简介可选项从父命令继承的命令请参阅 helm package 将chart目录打包到chart归档中 简介 该命令将chart打包成一个chart版…

    入门教程 2023年 12月 14日
  • 常用函数

    以下列出了 Pandas 常用的一些函数及使用实例: 文章目录读取数据实例查看数据实例实例数据清洗实例数据选择和切片实例数据排序实例数据分组和聚合实例数据合并实例数据选择和过滤数据…

    2023年 5月 16日
  • Java 基本数据类型

    变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,通过定义不同类…

    2023年 3月 4日
  • Helm | Helm 列表

    文章目录helm list简介可选项从父命令继承的命令请参阅 helm list 列举发布版本 简介 该命令会列举出指定命名空间的所有发布版本,(如果没有指定命名空间,会使用当前命…

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

    文章目录fping补充说明语法选项实例 fping fping检测主机是否存在 补充说明 fping命令 fping类似于ping,但比ping强大。与ping要等待某一主机连接超…

    入门教程 2023年 12月 14日
  • 指针

    文章目录指针什么是指针?指针的声明指针的空值指针的解引用向函数传递指针参数不要向函数传递数组的指针,而应该使用切片Go 不支持指针运算 指针 上一节:第十四篇 字符串下一节:第十六…

    2023年 12月 5日
  • DataFrame(表数据)

    DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Seri…

    2023年 5月 16日
  • Helm | Helm 卸载

    文章目录helm uninstall简介可选项从父命令继承的命令请参阅 helm uninstall 卸载版本 简介 该命令使用版本名称卸载版本 会删除与最新版本chart相关的所…

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

    文章目录usermod补充说明语法选项参数实例 usermod 用于修改用户的基本信息 补充说明 usermod命令 用于修改用户的基本信息。usermod 命令不允许你改变正在线…

    入门教程 2024年 3月 11日

发表回复

登录后才能评论
Translate »