语法错误:函数体外的非声明语句

Omi*_*mid 0 closures function go

该函数makeEvenGenerator应该返回一个以顺序方式生成偶数的函数:

package main 
import "fmt"
func makeEvenGenerator() func() uint {
    i := uint(0)
    return func() (ret uint) {
        ret = i
        i += 2
        return
    }
}func main() {
    nextEven := makeEvenGenerator()
    fmt.Println(nextEven()) // 0
    fmt.Println(nextEven()) // 2
    fmt.Println(nextEven()) // 4
}  
Run Code Online (Sandbox Code Playgroud)

当我运行它,我得到的错误syntax error: unexpected func, expecting semicolon or newline和Non-declaration statement outside function body.

该代码是从Caleb Doxsey的Go编程简介中逐字记录的.我不确定问题是什么.

小智 5

您缺少末尾的“}” makeEvenGenerator和中的“ func” 之间的换行符main。

我更正了错误,并将代码发布到了操场上。


pet*_*rSO 5

有关分号的规则.

Go编程语言规范

分号

形式语法使用分号";" 作为许多作品的终结者.Go程序可以使用以下两个规则省略大多数这些分号:

  1. 当输入被分解为标记时,如果行的最终标记是整数,浮点,虚数,符文或字符串文字的标识符,则在非空行的末尾自动将分号插入标记流中.关键字break,continue,fallthrough或return其中一个运算符和分隔符++, - ,),]或}
  2. 为了允许复杂语句占用一行,在结束")"或"}"之前可以省略分号.

错误在这里,

}func main() {
Run Code Online (Sandbox Code Playgroud)

写,

}
func main() {
Run Code Online (Sandbox Code Playgroud)