文章永久连接:https://tech.souyunku.com/?p=5300
函数是代码块的包装,把一些完成指定任务的代码放到一起,起个名字,就成为了函数
因此我们可以使用函数来划分不同功能,逻辑上每个函数执行的是指定的任务
Go 语言使用 func 关键字定义函数
函数定义
Go 语言函数定义语法格式如下:
func function_name( [parameter list] ) [return_types] {
//函数体
}
- func : 函数由 func 开始声明
- function_name :函数名称,函数名和参数列表一起构成了函数签名
- parameter list: 参数列表
参数就像一个占位符,当函数被调用时,我们可以将值传递给参数,这个值被称为实际参数
参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数
-
return_types: 返回类型
函数返回一列值,return_types 是该列值的数据类型
有些功能不需要返回值,这种情况下 return_types 不是必须的
- 函数体: 函数定义的代码集合
其它说明
Go 语言至少有个 main() 函数
函数声明告诉了编译器函数的名称,返回类型,和参数
Go 语言标准库提供了多种可动用的内置的函数
例如,len() 函数可以接受不同类型参数并返回该类型的长度,例如我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的函数个数
范例
下面的代码定义了一个 max 函数
max 函数传入两个整型参数 num1 和 num2,并返回这两个参数的最大值
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 声明局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
函数调用
创建函数,就是定义了函数需要做什么
现在我们需要使用这个函数,要调用它来执行指定任务
Go 语言使用 函数名 + ( 参数列表 ) 调用函数
下面的代码调用了我们上面定义的 max 函数,向函数传递参数,并返回值
/**
* file: main.go
* author: 搜云库技术团队(tech.souyunku.com)
* Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
*/
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 13
var b int = 7
var ret int
/* 调用函数并返回最大值 */
ret = max(a, b)
fmt.Printf( "最大值是 : %d\n", ret )
}
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 定义局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
上面的范例是在 main() 函数中调用 max() 函数,编译运行以上 Go 语言范例,输出结果如下
$ go run main.go
最大值是 : 13
函数返回多个值
Go 语言允许函数返回多个值
/**
* file: main.go
* author: 搜云库技术团队(tech.souyunku.com)
* Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
*/
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Mahesh", "Kumar")
fmt.Println(a, b)
}
编译运行以上范例,输出结果如下
$ go run main.go
Kumar Mahesh
函数参数
声明函数时的参数列表称之为 形参
形参就像定义在函数体内的局部变量
调用函数时传递的参数列表叫做 实参
Go 语言可以通过两种方式传递实参
传递类型 | 描述 |
---|---|
值传递 | 是指在调用函数时将实际参数复制一份传递到函数中 这样在函数中如果对参数进行修改,将不会影响到实际参数 |
引用传递 | 是指在调用函数时将实际参数的地址传递到函数中 那么在函数中对参数所进行的修改,将影响到实际参数 |
默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数
函数用法
函数用法 | 描述 |
---|---|
函数作为值 | 函数定义后可作为值来使用 |
闭包函数 | 闭包是匿名函数,可在动态编程中使用 |
方法 | 方法就是一个包含了接受者的函数 |
干货推荐
附录:GOlang 教程:系列文章
- 一、Go 语言基础教程
- 二、Go 语言 – 简介
- 三、Go 语言环境配置
- 四、Go 语言结构
- 五、Go 语言基础语法
- 六、Go 语言数据类型
- 七、Go 语言变量
- 八、Go 语言常量
- 九、Go 语言运算符
- 十、Go 语言条件语句
- 十一、Go 语言循环语句
- 【当前读到】十二、Go 语言函数
- 十三、Go 语言 – 变量作用域
- 十四、Go 语言 – 数组
- 十五、Go 语言 – 字符串
- 十六、Go 语言 – 指针
- 十七、Go 语言 – 结构体
- 十八、Go 语言 – 数据类型 interface
- 十九、Go 语言 – 切片(slice)
- 二十、Go 语言 – 哈希表(map)
- 二十一、Go 语言 – range 关键字
- 二十二、Go 语言 – 关键字 delete
- 二十三、Go 语言递归函数
- 二十四、Go 语言 – 类型转换
- 二十五、Go 语言 – 错误处理
- 二十六、Go 语言 – 开发工具
- 二十七、Go 语言 for 循环语句
- 二十八、Go 语言 – 多维数组
- 二十九、Go 语言 break 语句
- 三十、Go 语言 – 指向指针的指针
- 三十一、Go 语言 – 指针作为函数参数
- 三十二、Go 语言 goto 语句
- 三十三、Go 语言 if 语句
- 三十四、Go 语言函数值传递调用
- 三十五、Go 语言 for 循环嵌套
- 三十六、Go 语言 – 向函数传递数组
- 三十七、Go 语言 – 函数 – 引用传值
- 三十八、Go 语言 select 语句
- 三十九、Go 语言 if…else 语句
- 四十、Go 语言 switch 语句
- 四十一、Go 语言 – 闭包函数
- 四十二、Go 语言指针数组
- 四十三、Go 语言 if 语句嵌套
- 四十四、Go 语言 – 函数作为值
- 四十五、Go 语言函数方法
- 四十六、Go 语言 continue 语句