Function2如果它在声明它的行中,则无法访问它的内部。原因是您不是在指 函数, 而是指 变量 (类型是函数),并且只有在声明后才能访问它。
引用规格:声明和范围:
在函数内部声明的常量或变量标识符的范围始于ConstSpec或VarSpec的末尾(对于简短变量声明为ShortVarDecl),并在最里面的包含块的末尾结束。
在您的示例中
Function2是一个变量声明,而VarSpec是:
Function2 := func(m int) int { if m <= a { return a } return Function2(m-1)}而且,正如语言规范所描述的引号形式一样,变量标识符
Function2将仅在声明之后的范围内,因此您不能在声明本身内引用它。
首先声明
Function2变量,以便您可以从函数文字中引用它:
func Function1(n int) int { a := 10 var Function2 func(m int) int Function2 = func(m int) int { if m <= a { return a } return Function2(m - 1) } return Function2(n)}在Go Playground上尝试一下。



