一、闭包
package main
import "fmt"
//这个intSeq函数返回另一个在intSeq函数体内定义的匿名函数。这个返回的函数使用闭包的方式
func intSeq() func() int{
i := 0
return func() int{
i +=1
return i
}
}
func main(){
//我们调用intSeq函数,将返回值赋值给nextInt。
//这个nextInt包含了自己的值i,这样每次调用netxtInt都会更新i值
netxtInt := intSeq()
//通过多次调用netxtInt看看闭包的效果
fmt.Println(netxtInt())
fmt.Println(netxtInt())
fmt.Println(netxtInt())
//为了确定这个状态对于特定的函数是唯一的,我们重新创建测试一下
newInts := intSeq()
fmt.Println(newInts())
}
二、递归
package main
import "fmt"
//fact函数在a == 0之前一直调用自身
func fact(a int) int{
if a == 0{
return 1
}
return a * fact(a-1)
}
func main(){
fmt.Println(fact(7))
}