函数
package main
import "fmt"
func plus(a int, b int) int { return a + b}
func plusPlus(a, b, c int) int { return a + b + c}
// 多返回值func fn3(name string, age int) (a string, b int) { a = name b = age return // 这样返回等价与下面的返回 //return a, b}
// 可变参数func fn4(name string, age int, others ...string) { for _, v := range others { fmt.Printf("v: %v\n", v) }}
// 闭包func intSeq() func() int { i := 0 return func() int { i++ return i }}
// 递归func fact(n int) int { if n == 0 { return 1 } return n * fact(n-1)}
func main() { res := plus(1, 2) fmt.Println("1+2 =", res)
res = plusPlus(1, 2, 3) fmt.Println("1+2+3 =", res)
a, b := fn3("Tom", 18) fmt.Println(a) // Tom fmt.Println(b) // 18
fn4("Tom", 18, "Jerry", "Spike")
// 可变参数,本质上是切片 s := []string{"Jerry", "Spike"} fn4("Tom", 18, s...) // 展开切片
nextInt := intSeq() fmt.Println(nextInt()) // 1 fmt.Println(nextInt()) // 2 fmt.Println(nextInt()) // 3
newInts := intSeq() fmt.Println(newInts()) // 1
fmt.Println(fact(7)) // 5040
var fib func(n int) int fib = func(n int) int { if n < 2 { return n } return fib(n-1) + fib(n-2) } fmt.Println(fib(7)) // 13}package main
import "fmt"
func main() { i := 100 a := func() { fmt.Printf("i is %d\n", i) // i is 100 } a()
fmt.Println(returnClosure("Tom")()) // hello Tom
delay()}
func returnClosure(name string) func() string { return func() string { return "hello " + name }}
func delay() { fns := make([]func(), 0, 10) for i := 0; i < 10; i++ { fns = append(fns, func() { // 闭包里面使用闭包外的参数,其值是在最终调用的时候确定的 fmt.Printf("i is %d\n", i) }) }
for _, fn := range fns { fn() }}