package main
import"fmt"funcadder()func(int)int{
sum :=0returnfunc(v int)int{
sum += v
return sum
}}funcmain(){
a :=adder()for i :=0; i <10; i++{
fmt.Printf("0+...+%d=%d\n", i,a(i))}}------------------------------------------------------//无状态package main
import"fmt"type iAdder func(int)(int, iAdder)funcadder2(base int) iAdder {returnfunc(v int)(int, iAdder){return base + v,adder2(base + v)}}funcmain(){
a :=adder2(0)for i :=0; i <10; i++{var s int
s, a =a(i)
fmt.Printf("0+...+%d=%d\n", i, s)}}/*
0+...+0=0
0+...+1=1
0+...+2=3
0+...+3=6
0+...+4=10
0+...+5=15
0+...+6=21
0+...+7=28
0+...+8=36
0+...+9=45
*/
go语言函数编程闭包的应用-斐波那契数列
package main
import"fmt"funcfibonaqi()func()int{
a, b :=0,1returnfunc()int{
a, b = b, a+b
return a
}}funcmain(){
i :=fibonaqi()
fmt.Println(i())
fmt.Println(i())
fmt.Println(i())
fmt.Println(i())
fmt.Println(i())}/*
1
1
2
3
5
*/
package main
import("bufio""fmt""io""strings")funcfibonaqi() intGen {
a, b :=0,1returnfunc()int{
a, b = b, a+b
return a
}}type intGen func()intfunc(g intGen)Read(p []byte)(n int, err error){
next :=g()if next >10000{//设置最大结果限制为10000return0, io.EOF
}
s := fmt.Sprintf("%d\n", next)return strings.NewReader(s).Read(p)}funcprintfilecontnets(reader io.Reader){
scanner := bufio.NewScanner(reader)for scanner.Scan(){
fmt.Println(scanner.Text())}}funcmain(){
i :=fibonaqi()printfilecontnets(i)}/*
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
*/`` `n