函数不能按名称引用自身,因为它是匿名函数。它只有在分配给变量lookup后才被命名。从词汇上讲,只有在完全解析所分配的值后,才会发生这种情况。这与正常的func声明不同,在该声明中,名称立即可用(这使得递归更干净): func myFunc(arg) result { // ... do something ... // now we can call the function recursively return myFunc(arg)} 在您的情况下,常规的func声明不起作用,因此您需要某种“转发声明”来提供名称,这需要少量的重复: // forward declare the functionvar myFunc func(arg) resultmyFunc = func(arg) result { // ... do something ... // now we can call the function recursively return myFunc(arg)} 要在全球范围内做同样的事情,请参见Burak的答案。