go语言基础之函数
函数
函数定义
函数调用
1.无参无返回值
//定义 func sayHello() { fmt.Println("hello xiaopang") } //调用 sayHello()
2.有参数有返回值
//定义 func intSum(x int, y int) int { return x + y } func main(){ //调用 a := intSum(1, 2) fmt.Println(a) }
3.定义返回值的
func A(x int, y int) (ret int) { ret = x + y //ret返回值已经声明不需要在定义,直接拿过来使用就行 return } A(2, 2)
4.函数接收可变参数
//函数接收可变参数,在参数后面追加... 表示可变参数 // 可变参数在函数体中是切片类型 func intSum2(a ...int) { fmt.Println(a) fmt.Printf("%T\n", a) } intSum2(10, 20)
5.固定参数和可变参数同时出现,可变参数要放在最后
//go语言中没有默认参数 func intSum3(a int, b...int) int{ ret := a for _,arg := range b{ ret +=arg// 0+10 ret=10 10+20 ret=30 30+30 ret=60 } fmt.Println(ret) return ret } //最少传一个值,因为固定参数不能为空,可变参数可以不传值 intSum3(10,10) //或intSum3(10,)
6.函数中参数类型简写
//函数中参数类型简写 func intSum4(x, y int) int { ret := x + y fmt.Println(ret) return ret }
7.定义具有多个返回值的函数
//函数中定义多个返回值 func intSum5(x, y int) (sum, sub int) { sum = x + y sub = x - y fmt.Printf("x+y=%d\nx-y=%d\n",sum,sub) return sum,sub } intSum5(20,10)
defer延迟执行
//defer:延迟执行 func main() { fmt.Println("start...") //defer逆序执行,在函数即将返回的时候执行defer defer fmt.Println(1) defer fmt.Println(2) defer fmt.Println(3) fmt.Println("end...") }
函数变量
作用域
1.全局变量
var num int = 10 //全局变量 //可以在函数中访问全局变量 func testGlobal() { fmt.Println("变量num", num) }
var num int = 100//全局变量 func testGlobal() { num := 100 //局部变量 //函数中使用变量步骤 //1.先在函数内部查找局部变量 //2.如果没有局部变量,就用全局变量 fmt.Println("变量num", num) }
- 语句块中局部变量
//变量i此时只在for循环的语句块中生效 for i:=0;i<10;i++{ fmt.Println(i)//打印索引 } fmt.Println(i)
func testGlobal() { num := 100 //局部变量 //函数中使用变量步骤 //1.先在函数内部查找局部变量 //2.如果没有局部变量,就用全局变量 fmt.Println("变量num", num) } func main() { testGlobal() abc :=testGlobal abc() fmt.Printf("%T\n",abc)
//一般函数固定参数x y func add (x,y int) int { return x+y } //参数为函数类型的函数x,y为固定参数,op为函数类型参数 func calc(x,y int ,op func (int,int) int) int { return op(x,y) } func main() { r1 := calc(100,200,add) fmt.Println(r1)