Go语言函数里面不能声明函数?

如题:

package main

import (
    "fmt"
)

func main() {
    func say() {  // 这里会包语法错误
        fmt.Println("Hello")
    }
}

只能使用变量声明

package main

import (
    "fmt"
)

func main() {
    say := func() {
        fmt.Println("Hello")
    }
}

但是如上,使用变量声明就不能使用递归了,因为它没有名字,那么这个函数就只能写在外面来调用。还有个问题就是golang里面匿名函数能使用递归么?能的话怎么使用?

阅读 5.1k
2 个回答

函数先于匿名函数定义前声明即可。

package main

import (
    "fmt"
)

func main() {
    var say func(x *int)
    say = func(x *int) {
        if *x == 0 {
            fmt.Println(*x)
            return
        } else {
            fmt.Println(*x)
            *x--
            say(x)
        }
    }
    x := 10
    say(&x)
}

我猜这应该是你要的效果

package main

import "fmt"

var say = func(n int)  {
    var say func(int)
    say = func(n int)  {
        if n == 1 {
            fmt.Println("now n = 1")
        } else {
            fmt.Println("now n ", n)
            n = n -1
            say(n)
        }

    }
    say(n)
}

func main() {
    say(10)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题