我不能再运行Go程序了

时间:2014-11-15 23:00:21

标签: go

这是我遇到过的最奇怪的问题。我在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'工作得很好。

有什么想法吗?

编辑:

这是我构建和运行程序时的控制台输出:

build/run output

有趣的是,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两次没有效果。

1 个答案:

答案 0 :(得分:27)

  

The Go Programming Language Specification

     

Program execution

     

通过链接单个未经插入的包来创建完整的程序   用它导入的所有包调用主包,   及物动词。主包必须具有包名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