簡體   English   中英

語法錯誤:函數主體外部的非聲明語句

[英]Syntax Error: Non-declaration statement outside function body

函數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
}  

當我運行它時,我得到錯誤syntax error: unexpected func, expecting semicolon or newline並且Non-declaration statement outside function body

該代碼完全取自Caleb Doxsey的《 Go編程入門》。 我不確定是什么問題。

您在makeEvenGenerator末尾的“}”和main的“ func”之間缺少換行符。

我更正了錯誤,並將代碼發布到了操場上

有關於分號的規則。

Go編程語言規范

分號

形式語法使用分號“;” 作為許多作品的終結者。 Go程序可以使用以下兩個規則來省略大多數這些分號:

  1. 當輸入被分解為令牌時,如果該行的最終令牌是整數,浮點,虛數,符文或字符串文字之一的標識符,則將分號自動插入到非空白行的末尾的令牌流中。關鍵字會中斷,繼續,失敗或返回運算符和定界符++,-,),]或}之一
  2. 為了使復雜的語句占據一行,可以在結束的“)”或“}”之前省略分號。

錯誤在這里,

}func main() {

寫,

}
func main() {

makeEvenGeneratorfunc main末尾的}之間缺少新行。

該模式的另一種替代方法是使用通道不返回函數:

func evenGenerator() <-chan uint {
    ch := make(chan uint)
    go func() {
        i := uint(0)
        for {
            ch <- i
            i += 2
        }
    }()
    return ch
}

func main() {
    evens := evenGenerator()
    for i := 0; i < 3; i++ {
        fmt.Println(<-evens)
    }
}

操場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM