简单的golang程序没有';跑不动
下面是一个简单的golang脚本T1.go:简单的golang程序没有';跑不动,go,Go,下面是一个简单的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 wo
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位windows7上,golang版本是devel+f4d1cb8d9a91
或1.2rc1。错误代码在计算机上运行正常
更新我使用dos2unix
将源代码转换为unix行结尾,但它没有改变任何内容
Notes我的go安装在C:\go
目录中,并且C:\go\bin
被添加到%PATH%
环境变量中;源代码T1.go
放在C:\t\go
目录中,与go安装目录不同。不确定此配置是否导致了此问题。听起来像是1.2rc1
版本中的错误。尝试1.2rc2
,看看问题是否仍然存在。十六进制转储显示您在T1.go
文件中使用回车符(U+000D)而不是换行符(U+000A)。仅使用CR作为行尾是一种旧的Mac方式
声明新行是单行换行字符。由于找不到它,解析器假定它都写在同一行上。在这种情况下,编译器要求您实际键入分号
解决方案
把你的CR换成LF,它应该能工作
如果使用Notepad++,则可以在菜单Edit-EOL conversion-Unix/OSX Format中执行此转换
go-fmt
不会将CR转换为LF,但会将CRLF转换为LF。
这同样适用于dos2unix
。在您的情况下,它应该与mac2unix
配合使用。我上传了一段视频,记录了go的怪异体验:发布源代码的十六进制转储。我打赌你使用的是一个奇怪的编辑器,它会给你的代码带来难看的东西。我使用notepad2和notepad++,两者的结果都是一样的。视频中显示的hello.go文件的十六进制转储:,以及视频中显示的T1.go文件的十六进制转储:谢谢@ANisus。真奇怪,我不明白这是怎么回事。但无论如何,我尝试了mac2unix,现在在解析阶段没有错误报告。但它会显示“go.exe已停止工作”对话框,就像视频中显示的“hello.go”文件一样。@green一个问题解决,一个问题解决!我的答案只涉及T1.go。视频中的错误是另一个困扰我的问题。如果我有一些理论,我会回来;)