web-dev-qa-db-fra.com

go run: impossible d'exécuter le package non principal

voici l'application simple go. Je reçois le message d'erreur "exécuter: ne peut pas exécuter le package non principal", si je lance le code suivant.

package zsdfsdf

import (
    "fmt"
)

func Main() {
    fmt.Println("sddddddd")
}

pour résoudre ce problème, je dois juste nommer le paquet main.but, mais je ne comprends pas pourquoi je dois le faire. Je devrais pouvoir nommer le paquet comme je veux.

une autre question, je sais que la fonction principale est le point d’entrée du programme, vous en avez besoin. sinon cela ne fonctionnera pas. mais je vois que certains codes qui n'ont pas de fonction principale fonctionnent toujours.

cliquez sur ce lien, l’exemple au bas de la page n’utilisait pas la fonction principale et principale du paquet, et cela fonctionne toujours. juste curieux de savoir pourquoi.

https://developers.google.com/appengine/docs/go/gettingstarted/usingdatastore

26
qinking126

Vous devez spécifier dans votre fichier app.yaml quel est votre point d'accès à l'application. Jetez un oeil ici . Vous devez spécifier:

application: zsdfsdf

Voir aussi de ce lien ci-dessus:

"Remarque: lors de l'écriture d'un programme Go autonome, nous plaçons ce code Dans le paquet principal. Le moteur d'exécution de Go App fournit un paquet principal Spécial. Vous devez donc placer le code du gestionnaire HTTP dans un paquet de votre fichier choix (dans ce cas, bonjour). "

Vous avez raison de dire que tous les programmes Go ont besoin de la méthode Main. Mais il est fourni par Google App Engine. C'est pourquoi votre exemple fourni fonctionne. Votre exemple ne fonctionnerait pas localement (pas sur GAE).

6
Sam P

Le point d’entrée de chaque programme go est main.main, c’est-à-dire une fonction appelée main dans un package appelé main. Vous devez fournir un tel paquet principal.

GAE est une exception cependant. Ils ajoutent un package main, contenant la fonction main automatiquement à votre projet. Par conséquent, vous n'êtes pas autorisé à écrire le vôtre.

25
tux21b

Vous devez utiliser le package main, une erreur courante commençant par go est type

package Main

au lieu

package main
6
Pablo Cegarra

Une solution pour éviter cette erreur consiste à définir le fichier de point d'entrée somefilename.go en tant que package principal en ajoutant package main à la première ligne de entrypopin.

package main

// import statements 
import "fmt"

// code below
0
All Іѕ Vаиітy