2014-11-26 7 views
6

Come sviluppatore Python e Django, posso eseguire qualsiasi parte di codice nel mio progetto utilizzando uno script in modo indipendente.Avere più funzioni principali su Go

Non sono troppo sicuro di come ottenere la stessa cosa in Go, poiché sembra che ogni progetto Go debba avere solo un file eseguibile principale.

Mi piacerebbe chiamare una funzione nel mio progetto da cronjob, ma non sono sicuro di come aggiungerlo. Usare le bandiere nella mia funzione principale è l'unico modo in cui posso pensare di farlo. Ma sarà piuttosto confusa se il mio script accetta flag addizionali da sola come la seguente:

go run server.go --debug --another-flag --script-name <MY-SCRIPT> --my-script-flag-one <FLAG-ONE> --my-script-flag-two <FLAG-TWO> 

C'è un modo elegante di fare questo?

+0

È possibile trovare questa domanda utile: [cosa è un modo ragionevole per layout a Go project] (http://stackoverflow.com/q/14867452/142162) –

+0

Rendi il pacchetto di codice un pacchetto e un comando. Ad esempio, [Posso avere una libreria e un binario con lo stesso nome?] (Http://stackoverflow.com/questions/14284375/can-i-have-a-library-and-binary-with-the-same- nome/14284575) – peterSO

+0

parte della confusione sta pensando di andare come linguaggio di scripting. "go run" non dovrebbe essere usato per cose diverse dal giocare con un piccolo test, ad es. qualcosa che altrimenti metterebbe su "play.golang.org" – Dustin

risposta

5

I riferimento a "What is a sensible way to layout a Go project" l'articolo "Structuring Applications in Go", che mostra come esempio il progetto camlistore.
Tale progetto include several cmd packages, ciascuna con il proprio set di opzioni.

L'altra opzione sarebbe quella di utilizzare una libreria di interfaccia CLI come spf13/cobra, che consente di definire diversi comandi (stesso exe, gruppi separati di opzioni).

Command è il punto centrale dell'applicazione.
Ogni interazione supportata dall'applicazione sarà contenuta in un Command.
Un comando può avere comandi figli e opzionalmente eseguire un'azione.

Nell'esempio "hugo server --port=1313", 'server' è il comando

A Command ha la seguente struttura:

type Command struct { 
    Use string // The one-line usage message. 
    Short string // The short description shown in the 'help' output. 
    Long string // The long message shown in the 'help <this-command>' output. 
    Run func(cmd *Command, args []string) // Run runs the command. 
} 
Problemi correlati