例一:菲波拉契数

  1. func fibonacci() func() int {
  2. a, b := 0, 1
  3. return func() int {
  4. a, b = b, a+b
  5. return a
  6. }
  7. }
  8. func main() {
  9. f := fibonacci()
  10. for i:=0;i<10;i++{
  11. fmt.Println(f())
  12. }
  13. //f() //1
  14. //f() //1
  15. //f() //2
  16. //f() //3
  17. //f() //5
  18. //f() //8
  19. //f() //13
  20. //f() //21
  21. }

例二:为函数实现接口

  1. //生成
  2. func fibonacci() func() int {
  3. a, b := 0, 1
  4. return func() int {
  5. a, b = b, a+b
  6. return a
  7. }
  8. }
  9. func printFileContents(reader io.Reader){
  10. scanner :=bufio.NewScanner(reader)
  11. for scanner.Scan() {
  12. fmt.Println(scanner.Text())
  13. }
  14. }
  15. type intGen func() int
  16. func (g intGen) Read(p []byte) (n int, err error) {
  17. next :=g()
  18. if next > 10000 {
  19. return 0, io.EOF
  20. }
  21. s :=fmt.Sprintf("%d\n",next)
  22. return strings.NewReader(s).Read(p)
  23. }
  24. func main() {
  25. var f intGen = fibonacci()
  26. printFileContents(f)
  27. }

例三:使用函数遍历二叉树