[译] part 6: golang 函数

栏目: Go · 发布时间: 5年前

内容简介:函数是一个执行指定任务的代码块。函数接收输入,对输入执行一些计算并生成输出。在 go 中声明函数的一般语法是函数声明以

什么是函数

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

函数的声明

go 中声明函数的一般语法是

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

函数声明以 func 关键字开头,然后是函数名。入参在 () 之间,返回类型在最后。用 parametername type 语法指定参数名和类型。也可以指定任意数量的参数,如 (parameter1 type, parameter2 type) 。函数的代码块被包含在 {} 之间。

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

func functionname() {  
}

示例函数

让我们编写一个函数,它将产品的价格和数量作为入参,并通过取两个值的乘积来计算价格并返回。

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

上面的函数有两个输入参数 priceno 都是 int 类型,它返回 priceno 的乘积 totalPrice ,该返回值也是 int 类型。

如果连续的参数属于同一类型,可以在最后一个变量时写入一次类型来避免每个变量都声明类型。我可以将 int 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)
}

Run in playground

上述程序将打印,

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

Run in playground

如果函数返回多个值,应该在 () 之间指定它们。 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
}

areaperimeter 是上述函数中的命名返回值。请注意,函数中的 return 语句没有显式返回任何值。由于 areaperimeter 在函数声明中指定了返回值,因此在遇到 return 语句时会自动从函数返回它们。

空白标识符

_ 被称为 Go 中的空白标识符。它可以用来代替任何类型的任何值。让我们看看这个空白标识符的用途是什么。

rectProps 函数返回矩形的面积和周长。如果我们只需要面积而不想要周长怎么办?这就是 _ 发挥作用的地方。

下面的程序仅使用 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, _ := rectProps(10.8, 5.6) // perimeter is discarded
    fmt.Printf("Area %f ", area)
}

Run in playground

在第 13 行,我们只使用了面积并且使用 _ 标识符丢弃了周长参数。


以上所述就是小编给大家介绍的《[译] part 6: golang 函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

社交红利2.0

社交红利2.0

徐志斌 / 中信出版社 / 2015-9 / 42元

大型社交网络发展至今,开始显露出更为惊人的力量。有一个独特现象与这一结果相伴相生,即新应用或服务一进入社交网络就即时引爆,就像用户在等待它出现一样。随即开始的病毒式扩散,让创业者成为全民话题的焦点。但这一切是如何实现的?具备哪些特征的合作伙伴才可以被即时引爆? 作者从其长期追踪的近30个一进入微博、微信就引爆的经典案例中甄选出若干典型案例。从大量一手鲜活的后台数据入手,并结合腾讯对社交网络的......一起来看看 《社交红利2.0》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具