2017-07-21 3 views
0

J'ai un petit go projet de démonstration en Gogland avec la structure:Struct du même dossier parent comme principal n'est pas visible

awsomeProject 
    ->src 
     ->awsomeProject 
      ->configuration.go 
      ->main.go 

fichier de configuration a une structure simple juste pour la démo:
configuration.go:

package main 

type Config struct { 
    Data int 
} 

fichier principal utilise juste la struct Config:
main.go

package main 

import "fmt" 

func main(){ 
    var cfg Config 
    cfg.Data = 1 
    fmt.Println("lalala") 
} 

L'erreur que j'ai est:

/usr/local/bin/go/aller courir /Users/lapetre/Work/awsomeProject/src/awsomeProject/main.go de ligne de commande arguments src/awsomeProject/main.go: 6: non défini: Config processus terminé avec le code de sortie 2

Toute idée pourquoi la configuration ne se voit pas dans le principal?
Merci

Répondre

1

Lorsque vous générez des morceaux de code réutilisables, vous développez un package en tant que bibliothèque partagée. Mais quand vous développez des programmes exécutables, vous utiliserez le paquet "main" pour faire le paquet en tant que programme exécutable. Le paquet "main" indique au compilateur Go que le paquet devrait être compilé en tant que programme exécutable au lieu d'une bibliothèque partagée. La fonction principale dans le paquet "main" sera le point d'entrée de notre programme exécutable.

C'est pourquoi vous devez utiliser la structure suivante:

awsomeProject 
    ->src 
     ->awsomeProject 
      ->configuration.go 
     ->main.go 

avec main.go

package main 

import "fmt" 

func main(){ 
    var cfg awsomeProject.Config 
    cfg.Data = 1 
    fmt.Println("lalala") 
} 

et configuration.go

package awsomeProject 

type Config struct { 
    Data int 
} 

Pour plus de détails:

+0

src/main.go: 8: undefined: awsomeProject dans awsomeProject.Config – Lucian

+0

C'est une partie de la réponse, d'après ce que je peux comprendre, une partie importante pour avoir le projet dans le dossier $ GOPATH, c'est un peu stupide à mon avis, vous ne pouvez pas le créer n'importe où sur le disque et vous devez également ajouter sa dépendance au paquet dans le principal comme: import "<$GOATH>/awsomeProject/src/awsomeProject" – Lucian

+0

Par convention, les noms de paquets doivent être en minuscules. Je n'ai jamais vu un nom de paquet de casse mixte, au point que je devrais vérifier si c'est même valide. – Adrian

0

Essayez d'exécuter votre application avec la commande:

go run *.go 
0

Comment appelez-vous aller courir? Si vous l'appelez comme

go run main.go 

alors c'est le problème.

Go exécuté uniquement exécute le fichier (s) que vous lui dites. Donc, vous devez dire à exécuter aussi configuration.go, ou si vous avez plusieurs fichiers aller courir, vous pouvez utiliser

go run *.go 

comme suggéré Exmoor.Cependant, il y a quelques limites/inconvénients à "go run * .go", donc la meilleure alternative est d'utiliser go build au lieu de go run.

go build 

Va compiler tout. Ensuite, pour lancer l'exécutable:

./awesomeProject 

Pour combiner tout cela en une seule commande qui compiler et exécuter l'application quel que soit vous travaillez, vous pouvez utiliser:

go build && ./${PWD##*/} 

Je l'ai aliasé à

gorunapp 

juste pour le rendre plus facile.

Ce n'est peut-être pas la réponse au problème que vous rencontrez, mais j'espère que vous trouverez des informations utiles malgré tout.