这是一个简单的golang脚本T1.go:
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 +f4d1cb8d9a91
或 1.2rc1 。 错误代码在http://play.golang.org/
更新我使用dos2unix
将源代码转换为unix行结尾,但它不会改变任何内容
备注我的go已安装在C:\go
目录中,C:\go\bin
已添加到%PATH%
环境变量中;源代码T1.go
放在C:\t\go
目录中,该目录与go安装目录不同。不确定此配置是否会导致此问题。
答案 0 :(得分:7)
您的十六进制转储显示您在T1.go
文件中使用回车字符(U + 000D)而不是LineFeeds(U + 000A)。仅使用CR作为End-of-line是一种古老的Mac方式。
specification表示新行是单换行符。由于未找到,因此解析器假定它全部写在同一行上。在这种情况下,编译器要求您实际输入分号。
<强>解决方案强>
将您的CR更改为LF,它应该可以正常工作。
如果您使用Notepad ++,则可以在菜单Edit - EOL Conversion - Unix / OSX Format中进行此转换。
go fmt
不会将CR转换为LF,而会将CRLF转换为LF
dos2unix
也是如此。在您的情况下,它应该与mac2unix
一起使用。
答案 1 :(得分:-2)
听起来像1.2rc1
版本中的错误。试试1.2rc2
并查看问题是否仍然存在。