写点什么

4.1 Go 语言从入门到精通:函数

用户头像
xcbeyond
关注
发布于: 2021 年 05 月 04 日

常量和变量都是数据的一种载体,数据通过不同的运算符参与运算时,对计算的流程进行一定程度的控制便是流程控制,并且低于较多的数据通过内置容器进行存储,那么之后要干嘛呢?就是通过以上的所有概念进行整合,将其抽象到一个模块中去完成某一功能,这便是本篇的主题——函数


函数,并不是一个新概念,在不同语言中都能听到函数这个名词,那么在 Go 语言中函数又该如何使用呢?它到底与其他语言又有哪些差异呢?

1、函数定义

Go 语言中,函数定义是以关键字 func 开始,其标准格式如下:


func 函数名(参数列表) (返回参数列表) {   函数体}
复制代码


定义解析:


  • func:函数由关键字 func 开始,来表明这是一个函数。

  • 函数名:函数名称,需符合变量命名规范,函数名和参数列表一起构成了函数签名。在同一个包内不能定义相同的函数名。(记住:Go 语言中,是不支持函数重载的!)

  • 参数列表:参数就是一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。

  • 返回类型:函数返回一列值的数据类型。有时是不需要返回值的,此时返回类型可以没有。

  • 函数体:函数定义的代码集合,用来实现具体的函数逻辑。


根据函数参数情况可分为三类,接下来展开具体说明。


  • 固定参数

  • 可变参数

  • 固定参数和可变参数

1.1 固定参数的函数定义

函数定义格式如下:


func 函数名(参数列表) (返回参数列表) {   函数体}
复制代码


例如,两数相乘:


func multipleForTowNum(num1 int, num2 int) int {  result := num1 * num2  return result}
复制代码

1.2 可变参数的函数定义

Go 语言中还支持另外一种可变参数的函数,其函数定义格式如下:


func 函数名(v...T) (返回参数列表) {   函数体}
复制代码


注:v...T 表明 v 为一个切片,T 为切片中数据的类型。


例如,实现多数相乘:


func multipleForNums(nums ...int) int {  var result int = 1  for _, num := range nums {    result = result * num  }  return result}
复制代码


其中,nums为切片,用来存放不定长度的int类型数组。

1.3 固定参数和可变参数的函数定义

上面介绍了固定参数、可变参数的定义,如果存在固定参数和可变参数共存的情况,该如何定义呢?


其格式如下:


func 函数名(固定参数列表, v...T) (返回参数列表) {   函数体}
复制代码


例如,在两数相加基础上,再进行多数的相乘:


func multipleForTowNums(num1 int, num2 int, nums ...int) int {  result := num1 + num2  for _, num := range nums {    result = result * num  }  return result}
复制代码

2、函数分类

函数从大的方面分类两类:自定义函数、内置函数。

2.1 自定义函数

比如,上一小节【函数定义】中的举例函数都属于自定义函数,根据实际需求以关键字 func 开头的函数。另一方面,自定义函数是相对 Go 语言内置函数而言,指内置函数以外的函数。

2.2 内置函数

内置函数,是指在使用时无需导入包而直接使用的函数,如 lenappend等。在 Go 语言一共有 15 个内置函数,如下所示:


3、函数返回值

1、函数定义中我们知道函数在使用调用时,通常会给调用者返回一个结果,这个结果被称为函数的返回值。


一个函数可以没有返回值,也可以有一个或多个返回值。

3.1 多返回值

例如,将两个数进行交换,并返回交换后的两数:


func swap(x, y string) (string, string) {  return y, x}
复制代码

3.2 空白标识符

_ 是 Go 中的空白标识符。它可以代替任何类型的任何值,用处十分广泛。例如,当我们在调用一个多返回值的函数时,但只会用到其中一部分返回值而又不想凭空多声明多余变量,此时,空白标识符就发挥它的优势了。


例如,上面的两个数交换函数 swap:


package main
import "fmt"
func main() { x, _ := swap(1, 5) fmt.Println(x) // 输出:5}
func swap(x, y int) (int, int) { return y, x}
复制代码

4、函数使用

接下来,以一个简单示例来说明如何正确的使用函数。


如下所示是一个计算两数最大值的函数 max


package main
import "fmt"
func main() { fmt.Print(max(10, 7))}
// 获取两数的最大值func max(num1, num2 int) int { if num1 > num2 { return num1 } else { return num2 }}
复制代码


发布于: 2021 年 05 月 04 日阅读数: 10
用户头像

xcbeyond

关注

不为别的,只为技术沉淀、分享。 2019.06.20 加入

公众号:程序猿技术大咖,专注于技术输出、分享。

评论

发布
暂无评论
4.1 Go语言从入门到精通:函数