在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
package main import ( "errors" "fmt" ) // 1. 无返回值的函数 func f1() { fmt.Println("Hello World!") } // 2. 有返回值;多个形参类型一致,可简写 func f2(x, y int) int { return x + y } // 3. 可变参数 固定参数搭配可变参数使用时,可变参数要放在固定参数的后面 func f3(x string, y ...int) { s := 0 for _, v := range y { s += v } fmt.Println(x, y, s) // hello [1 2 3] 6 } // 4. 多返回值 返回值指定了 sum、sub, return 后可不跟返回值 func f4(x, y int) (sum, sub int) { sum = x + y sub = x - y fmt.Println(sum, sub) return } // 5. 函数类型与变量 type calc func(int, int) int // 定义一个函数类型 calc func f5(x, y int) int { return x + y } func f6(x, y int) int { return x - y } // 6. 函数作为参数 func f7(x, y int, op func(int, int) int) int { return op(x, y) } // 7. 函数作为返回值 func f8(s string) (func(int, int) int, error) { switch s { case "+": return f5, nil case "-": return f6, nil default: err := errors.New("无法识别的操作符!") return nil, err } } // 8. 匿名函数 func f9() { // 匿名函数保存到变量里 add := func(x, y int) { fmt.Println(x + y) } add(20, 20) // 立即执行函数 func(x, y int) { fmt.Println(x + y) }(20, 20) } // 9. 闭包 func f10(base int) (func(int) int, func(int) int) { add := func(i int) int { base += i return base } sub := func(i int) int { base -= i return base } return add, sub } // 10. defer func f13() { fmt.Println("start") defer fmt.Println(1) defer fmt.Println(2) defer fmt.Println(3) fmt.Println("end") // start // end // 3 // 2 // 1 } // 11 panic/recover func funcA() { fmt.Println("func A") } func funcB() { defer func() { err := recover() // 如果程序出出现了panic错误,可以通过recover恢复过来 if err != nil { fmt.Println("recover in B") } }() fmt.Println(123) panic("panic in B") } func funcC() { fmt.Println("func C") } func main() { f1() f2(1, 2) f3("hello", 1, 2, 3) f4(3, 2) var c calc c = f5 fmt.Printf("Type of c: %T\n", c) // Type of c: main.calc fmt.Println(c(1, 2)) c1 := f5 fmt.Printf("Type of c: %T\n", c1) // Type of c: func(int, int) int fmt.Println(c1(1, 2)) fmt.Println(f7(1, 2, f5)) c2, _ := f8("+") fmt.Println(c2(20, 10)) f9() f11, f12 := f10(10) fmt.Println(f11(1), f12(2)) //11 9 fmt.Println(f11(3), f12(4)) //12 8 fmt.Println(f11(5), f12(6)) //13 7 f13() funcA() funcB() funcC() // func A // 123 // recover in B // func C }
|
请发表评论