函数的声明
函数代表了代码执行的逻辑,Go语言中函数的关键字是func加上函数名,参数列表,返回值和函数体,构成一个函数。我们在开发一个程序中一定会包含很多个函数。
func myfunc(p int) int {
return p
}
func Money() {
println("Money")
}
注意点
- 函数名可以由字母和数字组成,但不能是数字开头。
- 函数的首字母区分大小写,如果是大写的标识公共函数,其他包内可以调用到(前提是引入了当前包)。
- 函数的首字母小写,则表示为私有的函数,只能在本包中调用。
函数的使用
// 函数的定义并不会执行函数的过程,只有调用的时候才会执行
func main() {
// 这是一个特殊的函数,由系统自动调用
}
func funcname(parametername1 type1, parametername2 type2) (output1 type1, output2 type2) {
// 处理逻辑
// 返回 go语言支持多返回值,一个函数可以返回多个结果
return value1, value2
}
函数的调用
package main
import "fmt"
func main() {
// 这是一个特殊的函数,由系统自动调用
sum := getSum()
fmt.Printf("%d\n", sum) // 5050
}
// 定义函数 求 1-100 的和
func getSum() int {
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
return sum
}
注意点
- 函数可以没有参数。
- 函数也可以没有返回值。
- 函数必须先定义才能使用,如果定义后不使用,虽然不会报错但也没有意义。
- 函数名不能重复。
函数的参数
package main
import "fmt"
func main() {
// 调用函数
sum := getSum2(100) // 这里50,作为实参传递给方法
fmt.Printf("%d\n", sum) // 5050
}
// 定义函数,num为形参,用于接收调用方传递过来的参数
func getSum2(num int) int {
sum := 0
for i := 1; i <= num; i++ {
sum += i
}
return sum
}
函数返回值/多返回值
函数可以定义多个返回值,并且返回值类型,返回值数量都必须是一一对应的,return是将结果返回到函数的调用处,结束函数的执行。_空白标识符,舍弃返回的数据。
package main
import "fmt"
func main() {
// 调用函数
sum1 := getSum3(100) // 这里50,作为实参传递给方法
fmt.Printf("%d\n", sum1) // 输出 5050
sum2, sum3 := getSum4(100)
fmt.Printf("%d\n", sum2) // 输出 5050
fmt.Printf("%d\n", sum3) // 输出 5051
}
func getSum3(num int) int {
sum := 0
for i := 1; i <= num; i++ {
sum += i
}
return sum
}
func getSum4(num int) (out1 int, out2 int) {
sum := 0
for i := 1; i <= num; i++ {
sum += i
}
return sum, sum + 1
}
变量在函数的作用域
package main
import "fmt"
func main() {
res := closure()
fmt.Println(res()) // 1
r1 := res()
fmt.Println(r1) // 2
r2 := res()
fmt.Println(r2) // 3
res2 := closure()
fmt.Println(res2()) // 1
r3 := res2()
fmt.Println(r3) // 2
}
// 定义一个闭包结构的函数,返回一个匿名函数
func closure() func() int {
// 定义局部变量
i := 0 // 闭包结构的函数,可以访问外部函数的局部变量
// 返回一个匿名函数
return func() int {
i++
return i
}
}