函数
函数定义
定义格式:
func function_name( [parameter list] ) [return_types] {
函数体
}
- func:函数由 func 开始声明
- function_name:函数名称,参数列表和返回值类型构成了函数签名。
- parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
- return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
- 函数体:函数定义的代码集合。
例:
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 声明局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
函数调用
函数调用和C语言大差不差。
例:
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
}
结果展示:
最大值是 : 200
返回多个值
Go能够返回多个函数值。
例:
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Google", "Runoob")
fmt.Println(a, b)
}
结果展示:Runoob Google
函数参数
和C语言大差不差,基本使用方法是一样的。
默认情况下,Go使用的时值传递的方式,引用传递就是C语言中的传递地址信息。
函数用法
- Go语言函数作为实参
package main import ( "fmt" "math" ) func main() { /* 声明函数变量 */ getSquareRoot := func(x float64) float64 { return math.Sqrt(x) } /* 使用函数 */ fmt.Println(getSquareRoot(9)) }
在上述代码中,用了定义的函数中初始化一个变量,该函数使用了内置函数返回值作为参数。结果为3。
-
闭包。(之后详细解释)
-
方法
func (variable_name variable_data_type) function_name() [return_type]{ /* 函数体*/ }
Go语言中的方法其实就是一个特殊函数, 只不过Go语言中的方法
一般用于
将函数和结构体绑定在一起
, 让结构体除了能够保存数据外还能具备某些行为。 方法和函数异同,方法和函数可以以不同的形式实现相同的效果。package main import "fmt" type person struct { name string age int } // 定义一个方法 func (p person) say() { fmt.Println("say方法") } // 定义一个函数 func say(p person) { fmt.Println("say函数") } func main() { p := person{"lnj", 33} p.say() // say方法 say(p) // say函数 }
变量作用域
- 函数内定义的变量称为局部变量
- 函数外定义的变量称为全局变量
- 函数定义中的变量称为形式参数
局部变量
在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。
全局变量
在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。
形式参数
形式参数会作为函数的局部变量来使用。