goland无法运行go程序_简单的golang程序无法运行

在64位Windows 7环境下,使用Goland运行一个简单的Golang程序时,遇到了预期分号错误。通过在行尾添加分号解决了问题,但引发疑问:Golang是否需要行尾分号。更新提到使用dos2unix转换源代码行结束符未解决问题。问题根源在于文件使用回车符作为行结束符,而非规范的换行符。解决方案是将行结束符从回车符转换为换行符,可以使用Notepad++的EOL Conversion功能转换为Unix/OSX Format,或者使用mac2unix工具。
摘要由CSDN通过智能技术生成

Here is a simple golang script T1.go:

package main

import "fmt"

func main() {

fmt.Println("Hello world")

}

run it with go run T1.go, I get:

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

If I added ; to line end, the program is okay to run:

package main;

import "fmt";

func main() {

fmt.Println("Hello world")

}

But isn't the semicolon redundant of line ending in golang?

PS: I am on 64bit window 7, the golang version is devel +f4d1cb8d9a91 or 1.2rc1. The error code runs perfect on http://play.golang.org/

Updates I've used dos2unix to convert the source code to unix line ending, but it doesn't change anything

Notes My go is installed in C:\go directory and the C:\go\bin is added into the %PATH% environment variable; The source code T1.go is put inside the C:\t\go directory, which is different from the go installation directory. Not sure if this configuration contribute to the issue.

解决方案

Your Hex dump shows that you are using Carriage Return characters (U+000D) instead of LineFeeds (U+000A) in the T1.go file. Using only CR as End-of-line is an old Mac way of doing it.

The specification states that a new line is a single line feed character. Since this is not found, the parser assumes it is all written on the same line. In such a case, the compiler requires that you actually type out the semi-colons.

Solution

Change your CR to LF and it should work.

If you use Notepad++, you can do this conversion in the menu Edit - EOL Conversion - Unix/OSX Format.

go fmt does not convert CR to LF, while it does convert CRLF to LF.

The same goes for dos2unix. In your case, it should work with mac2unix.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值