4

这是一个简单的 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:我在 64bit window 7,golang 版本是devel +f4d1cb8d9a91or 1.2rc1错误代码在http://play.golang.org/上运行完美

我用来dos2unix将源代码转换为 unix 行尾的更新,但它并没有改变任何东西

备注我的 go 安装在C:\go目录中,并C:\go\bin添加到%PATH%环境变量中;源码T1.go放在C:\t\go目录里面,和go的安装目录不同。不确定此配置是否会导致问题。

4

2 回答 2

8

您的十六进制转储显示您在文件中使用回车符 (U+000D) 而不是换行符 (U+000A) T1.go。仅使用 CR 作为行尾是一种旧的 Mac 方式。

规范声明新行是一个换行符。由于没有找到,解析器假定它都写在同一行。在这种情况下,编译器要求您实际输入分号。

解决方案

将您的 CR 更改为 LF,它应该可以工作。

如果您使用 Notepad++,您可以在菜单编辑 - EOL 转换 - Unix/OSX 格式中进行此转换。

go fmt不将 CR 转换为 LF,而将 CRLF 转换为 LF。
也是如此dos2unix。在您的情况下,它应该与mac2unix.

于 2013-10-18T08:28:57.983 回答
-2

听起来像是1.2rc1版本中的错误。试试看1.2rc2问题是否仍然存在。

于 2013-10-18T06:16:11.137 回答