2013-10-18 81 views
3

下面是一個簡單的腳本golang T1.go:簡單golang程序不運行

package main 

import "fmt" 

func main() { 
    fmt.Println("Hello world") 
} 

go run T1.go運行它,我得到:

T1.go:1:15: expected ';', found 'import' 

如果我加入;到行結束,該程序可以運行:

package main; 

import "fmt"; 

func main() { 
    fmt.Println("Hello world") 
} 

但是,不是以golang結尾的分號多餘的行嗎?

PS:我在64位窗口7,golang版本是devel +f4d1cb8d9a911.2rc1。該錯誤代碼運行完美的http://play.golang.org/

更新我用dos2unix轉換的源代碼,以結束Unix行,但它不會改變任何東西

注意我去安裝在C:\go目錄和C:\go\bin被添加到%PATH%環境變量中;源代碼T1.go被放入C:\t\go目錄中,該目錄與go安裝目錄不同。不確定此配置是否會導致此問題。

+0

我上傳了一段視頻,記錄了奇怪的體驗:http://www.screenr.com/OQtH –

+0

發佈源代碼的十六進制轉儲。我敢打賭你正在使用一些奇怪的編輯器,它會在你的代碼中使用醜陋的東西 – Volker

+0

我使用notepad2和notepad ++,兩者都有相同的結果。視頻中顯示的hello.go文件的十六進制轉儲:http://pastebin.com/59H8ukXV和視頻中顯示的T1.go文件的十六進制轉儲:http://pastebin.com/qGdVuMFd –

回答

7

您的十六進制轉儲顯示您在T1.go文件中使用回車符(U + 000D)代替LineFeeds(U + 000A)。使用唯一的CR作爲行尾是Mac的老辦法。

specification指出新行是單行換行符。由於沒有找到,解析器假定它全部寫在同一行上。在這種情況下,編譯器要求您實際輸出分號。

解決方案

更改您的CR到LF,它應該工作。

如果您使用Notepad ++,則可以在菜單Edit - EOL Conversion - Unix/OSX Format中執行此轉換。

go fmt不會將CR轉換爲LF,而將CRLF轉換爲LF。
dos2unix也是如此。在你的情況下,它應該與mac2unix一起工作。

+0

感謝@ANisus。這很奇怪,不明白它如何到達mac的方式。但無論如何我嘗試了mac2unix,現在在解析階段沒有錯誤報告。但它顯示「去」。exe已停止工作對話框,如在hello.go文件的視頻中所示。 –

+0

@green一個問題倒了,一個去!我的答案只涉及T1.go。視頻中的錯誤是一個單獨的問題,讓我難住。如果我有一些理論,我會回來;) – ANisus

-2

聽起來像1.2rc1版本中的錯誤。嘗試1.2rc2,看看問題是否仍然存在。

+0

沒有新鮮的1.2 rc2也不起作用 –