package main import "fmt" func main() { //数字传值 a, b := 1, 2 A(a, b) fmt.Println(a, b) //传递slice切片,对内存地址进行了拷贝 s1 := []int{1, 2, 3} AB(s1) fmt.Println(s1) //数字传内存地址 q := 1 BC(&q) fmt.Println(q) //函数也是一种类型 t := AAA t() //匿名函数--没有名字的函数 tt := func() { fmt.Println("我是匿名函数") } tt() //-------------闭包------------ ff := closure(10) fmt.Println(ff(1)) fmt.Println(ff(2)) fmt.Println("-------------defer逆序函数---------") //defer函数--逆序输出 for i := 0; i < 3; i++ { defer fmt.Println(i) } //执行方法,需要后面加上小() for i := 0; i < 3; i++ { defer func() { fmt.Println(i) }() } } /* 闭包 closure(x int)函数返回func(int) int */ func closure(x int) func(int) int { return func(y int) int { return x + y } } /* 函数也是一种类型 */ func AAA() { fmt.Println("func 也是一种类型") } /* 数字传内存地址 */ func BC(q *int) { *q = 2 fmt.Println(*q) } /* 传递slice切片,对内存地址进行了拷贝,引用传递 */ func AB(s []int) { s[0] = 7 s[1] = 8 fmt.Println(s) } /* 数字传值,值传递 */ func A(a ...int) { a[0] = 3 a[1] = 4 fmt.Println(a) } //可变参数放在最后 //func A(b string, a ...int) { // fmt.Println(a) //} //无返回值 //func A(a int, b string) { //} //参数,返回值 //func A(a int, b string) (int, string) { //} //参数可以这样写 //func A(a, b int) int { //} //返回值也可以这样写 //func AB(a, b, c int) (a, b, c int) { // a, b, c = 1, 2, 3 // return a, b, c //} [3 4] 1 2 [7 8 3] [7 8 3] 2 2 func 也是一种类型 我是匿名函数 11 12 -------------defer逆序函数--------- 3 3 3 2 1 0