Skip to content

函数

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()
}
}