这是我遇到过的最奇怪的问题。我在Windows 2008 R2虚拟机上设置了Go开发环境。我甚至没有重启它也没有运行Windows更新。
今天我才意识到我不能再运行Go程序了。我可以使用'go test'成功构建和运行单元测试。但是,运行任何已编译的Go程序(甚至是hello world)会出现一个标题为“Unsupported 16-bit application”的弹出窗口。错误消息如下:
此文件的版本与Windows版本不兼容 你在跑。检查计算机的系统信息以查看 是否需要x86(32位)或x64(64位)版本 程序,然后联系软件发行商。
无论使用什么版本的Go(x86 / x64),结果都是一样的。另请注意,我没有使用任何IDE。我从命令行调用go.exe来构建/测试。
我无法理解这一点,因为运行'go test'工作得很好。
有什么想法吗?
编辑:
这是我构建和运行程序时的控制台输出:
有趣的是,dumpbin表明可执行文件确实存在问题
C:\Program Files (x86)\Microsoft Visual Studio 11.0>dumpbin /headers
C:\Projects \GoPlayground\src\playground\playground.exe Microsoft (R)
COFF/PE Dumper Version 11.00.51106.1 Copyright (C) Microsoft
Corporation. All rights reserved.
Dump of file C:\Projects\GoPlayground\src\playground\playground.exe
File Type: LIBRARY
C:\Projects\GoPlayground\src\playground\playground.exe : warning
LNK4003: invali d library format; library ignored
C:\Projects\GoPlayground\src\playground\playground.exe : warning
LNK4048: Invali d format file; ignored
Summary
C:\Program Files (x86)\Microsoft Visual Studio 11.0>
这是完整的源代码:
package playground
import "fmt"
import "playground/another"
func main() {
fmt.Println("Hello world!")
fmt.Println(another.Foobar(2))
}
-------------------
package another
func Foobar(i int) int {
return i + 1
}
EDIT2:
我重新安装Go两次没有效果。
答案 0 :(得分:27)
The Go Programming Language Specification
通过链接单个未经插入的包来创建完整的程序 用它导入的所有包调用主包, 及物动词。主包必须具有包名main和声明 一个函数main,它不带参数,也不返回任何值。
func main() { … }
程序执行从初始化主程序包开始,然后 调用函数main。当该函数调用返回时, 程序退出。它不等待其他(非主要)goroutines 完整。
使用package main
,而不是package playground
。例如,
playground.go
:
package main
import (
"fmt"
"playground/another"
)
func main() {
fmt.Println("Hello world!")
fmt.Println(another.Foobar(2))
}
playground/another.go
:
package another
func Foobar(i int) int {
return i + 1
}
输出:
Hello world! 3