函数
函数的定义
基本格式
参数的格式
有参数的函数
参数类型简写
可变参数
返回值的格式
有返回值
多返回值
命名返回值
变量作用域
高阶函数
函数也是一种类型,它可以作为参数也可以作为返回值
函数进阶
变量作用域
全局变量
全局变量是定义在函数外部的变量
在函数中可以访问到全局变量
局部变量
函数内定义的变量无法在该函数外使用
语句块定义的变量(if条件判断、for循环、switch语句)
全局作用域 函数内部作用域 语句块作用域
package main import "fmt" // 变量的作用域 var x = 100 // 定义一个全局变量 // 定义一个函数 func f1() { // x := 10 name := "理想" // 函数中查找变量的顺序 // 1. 先在函数内部查找 // 2. 找不到就往函数的外面查找,一直找到全局 fmt.Println(x, name) } func main(){ f1() // fmt.Println(name) // 函数内部定义的变量只能在该函数内部使用 // 语句块作用域 if i := 10; i < 18 { fmt.Println("上学啦") } // fmt.Println(i) for j := 0; j < 5; j++ { fmt.Println(j) } // fmt.Println(j) }
函数类型与变量
定义函数类型
type关键字定义一个函数类型:
type calculation func(int, int) int
定义了一个calculation函数类型,它接收两个int类型的参数并且返回一个int类型的返回值
package main import ( "fmt" ) // 函数类型 func f1() { fmt.Println("Hello world") } func f2()int { return 10 } func f4(x, y int) int { return x + y } // 函数也可以作为参数的类型 func f3(x func() int) { ret := x() fmt.Println(ret) } func ff(a, b int) int { return a + b } // 函数还可以作为返回值 func f5(x func() int) func(int, int) int { return ff } func main(){ a := f1 fmt.Printf("%T\n", a) // func() b := f2 fmt.Printf("%T\n", b) // func() int f3(f2) f3(b) fmt.Printf("%T\n", f4) // func(int, int) int // f3(f4) f7 := f5(f2) fmt.Printf("%T\n", f7) }