Go 语言函数
函数是基本的代码块,用于执行一个任务。
Go 语言最少有个 main() 函数。
你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。
函数声明告诉了编译器函数的名称,返回类型,和参数。
Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。
函数定义
Go 语言函数定义格式如下:
func function_name( [parameter list] ) [return_types] { 函数体 }
函数定义解析:
- func:函数由 func 开始声明
- function_name:函数名称,函数名和参数列表一起构成了函数签名。
- parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
- return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
- 函数体:函数定义的代码集合。
实例
以下实例为 max() 函数的代码,该函数传入两个整型参数 num1 和 num2,并返回这两个参数的最大值:
实例
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 声明局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
func max(num1, num2 int) int {
/* 声明局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
函数调用
当创建函数时,你定义了函数需要做什么,通过调用该函数来执行指定任务。
调用函数,向函数传递参数,并返回值,例如:
实例
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 100
var b int = 200
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
}
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 100
var b int = 200
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()函数,执行结果为:
最大值是 : 200
函数返回多个值
Go 函数可以返回多个值,例如:
实例
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Google", "facesoho")
fmt.Println(a, b)
}
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Google", "facesoho")
fmt.Println(a, b)
}
以上实例执行结果为:
facesoho Google
函数参数
函数如果使用参数,该变量可称为函数的形参。
形参就像定义在函数体内的局部变量。
调用函数,可以通过两种方式来传递参数:
传递类型 | 描述 |
---|---|
值传递 | 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 |
引用传递 | 引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。 |
默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。
函数用法
函数用法 | 描述 |
---|---|
函数作为另外一个函数的实参 | 函数定义后可作为另外一个函数的实参数传入 |
闭包 | 闭包是匿名函数,可在动态编程中使用 |
方法 | 方法就是一个包含了接受者的函数 |
大王叫我来巡山1998
函数
函数的格式是固定的 func 函数名 参数 返回值(可选) 函数体
func main(){
fmt.Println("Hello go")
}
在golang中 两个特殊的函数 main函数 init函数 main函数 所有语言中都 作为 程序的入口 只能有一个
init函数在每个package 可选 可以有多个( 建议一个package中一个init函数) init函数在 导入该package时 会自动调用init函数 只会被调用一次 一个package被多次引用时 只会被导入一次
参数传递
普通变量
使用普通变量作为函数参数 在传递参数时 是对变量值得拷贝 即将实参的值复制给变参 当函数对变参进行处理时 不会影响原来实参的值
指针
函数的变量 可以使用指针变量 在进行参数传递时 是一个地址 即将实参的内存地址复制给变参 对变参的修改 影响 实参的值
数组
go语言在将数组名作为函数参数的时候 参数传递 是对数组的复制 在形参中对数组元素的修改都不会影响到数组元素原来的值
slice, map, chan
使用slice map chan 作为函数参数时 进行参数传递将是一个地址拷贝 即将底层数组的内存地址复制给 参数slice map chan 这时 对slice map chan 元素的操作就是对底层数组元素的操作
函数名字
go语言 函数也作为一种数据类型 函数也可以作为函数的参数来使用
返回值
go语言可以返回局部变量的指针 因为go语言的回收机制是 发现有被引用的栈上临时变量时 会自动存在堆上
文人墨客
菱形
计算结果:
文人墨客
九九乘法表
执行输出为:
文人墨客
杨辉三角形:
执行输出结果为: