2014-11-15 11 views
8

Questo è il problema più strano che abbia mai incontrato. Ho installato il mio ambiente di sviluppo Go su una macchina virtuale Windows 2008 R2. Non riesco nemmeno a riavviarlo né a eseguire l'aggiornamento di Windows.Non riesco a eseguire i programmi Go più

Oggi mi sono appena reso conto che non posso più eseguire programmi Go. Posso creare ed eseguire test unitari con successo con 'go test'. Tuttavia, l'esecuzione di qualsiasi programma Go compilato, (anche Hello World) fa apparire una finestra pop-up intitolata "Applicazione 16-bit non supportata". Il messaggio di errore è il seguente:

La versione di questo file non è compatibile con la versione di Windows in esecuzione. Controlla le informazioni di sistema del tuo computer per vedere se hai bisogno di una versione x86 (32-bit) o ​​x64 (64-bit) del programma , quindi contatta l'editore del software.

Il risultato è lo stesso indipendentemente dalla versione di Go I (x86/x64). Si noti inoltre che non sto usando alcun IDE. Chiamo go.exe per creare/test dalla riga di comando.

Non riesco a capirmi perché funzionare "go test" funziona bene.

Qualche idea?

EDIT:

Ecco l'output della console quando costruire ed eseguire il programma:

build/run output

È interessante notare che, dumpbin suggerisce che in effetti c'è qualcosa di sbagliato con l'eseguibile

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> 

Ed ecco il codice sorgente completo:

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:

Ho reinstallato andare due volte senza alcun effetto.

+2

Mostraci ciò che si fa, per esempio con un semplice ciao mondo mostra quali comandi si eseguono, dove si trovano i file che si compilano e qualcos'altro di interesse, come l'output di 'go -version – nos

+0

Mostraci un esempio riproducibile: [Come creare un minimo, completo, e Esempio verificabile] (http://stackoverflow.com/help/mcve) – peterSO

+1

Ok, ho appena aggiunto molte più informazioni. –

risposta

11

The Go Programming Language Specification

Program execution

Un programma completo è creato collegando un unico pacchetto, unimported chiamato il pacchetto principale con tutti i pacchetti importa, transitivamente. Il pacchetto principale deve avere il nome del pacchetto main e dichiarare una funzione main che non accetta argomenti e non restituisce alcun valore.

func main() { … } 

L'esecuzione del programma inizia inizializzando il pacchetto principale e quindi invocando la funzione principale. Al termine di tale chiamata di funzione, viene chiuso il programma . Non attende che altre (non principali) goroutine arrivino a complete.

Utilizzare package main, non package playground.Ad esempio,

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 
} 

uscita:

 
Hello world! 
3 
+2

Questo era davvero il problema. Ricordo di aver ribattezzato main to playground alcuni giorni fa. Non avrei mai immaginato che potesse avere effetti così drammatici. Grazie! –

Problemi correlati