domenica 24 gennaio 2010

Parametri da linea di comando secondo Go

Go-lang è stato pensato per essere il linguaggio definitivo per le applicazioni di sistema.
Una delle cose che più impreziosiscono gli strumenti che (non) tutti i giorni utilizziamo per l'amministrazione del nostro sistema è sicuramente il parco di opzioni e flag che possiamo indicare da linea di comando.

Go-lang permette molto comodamente di dichiarare quali saranno i parametri che ci aspettiamo di ricevere da linea di comando, di che tipo saranno e che cosa comunicare all'operatore per aiutarlo nell'utilizzo del tool.

Vediamo, con un semplice esempio, ciò che Go ci mette a disposizione per rendere la nostra applicazione il più flessibile possibile.

Cominciamo con dichiarare quali flag ci aspetteremo:
//Flags
var file_to_download * string;
var fileType * string;
var configShow * string;
var configEdit * bool;


Successivamente definiamo le keywords con le quali potranno essere attivati i parametri:
/**
*Function used to initialize flags from command line.
*/
func initFlags() int
{
file_to_download = flag.String("d","","Type the name of the file");
fileType = flag.String("t","*","Kind of file you want to download:\n\t*: all\n\tmov: movie\n\tmsc: music");
configShow = flag.String("c","editor","Open the config file into chosen [editor]");
configEdit = flag.Bool("C",false,"Edit parameters of config from inside the program.");
}

Il package flag contiene una funzione di definizione parametro per ogni tipo di comando che desideriamo ricevere. Tutte queste funzioni però hanno tutte la stessa forma. Ricevono infatti tre parametri:

  1. La lettera/Le lettere che identificano il comando;

  2. Il comportamento di default;

  3. Un messaggio da dare all'operatore su come va utilizzato il flag.


Una volta definiti i flag possiamo utilizzare i comandi che arrivano dalla shell all'interno del nostro programma:
/**
*Main function. From here the program starts.
*/
func main()
{

//Initialize flags
initFlags();

flag.Parse(); //Scans the arg list and sets up flags

var fileStr string = "";
var typeStr string = "";
var confStr string = "";
var confMode bool = false;

confStr += *configShow;
confMode = *configEdit;

if(confMode)
{
os.Stdout.WriteString("Config mode\n");
}
else
{
os.Stdout.WriteString("Normal mode\n");
}

if( *file_to_download == "") //Want to download a file
{
fileStr += "errore";
fileStr += Newline;
os.Stdout.WriteString(fileStr);
}
else
{
fileStr += *file_to_download;
fileStr += Newline;
os.Stdout.WriteString(fileStr);
}

typeStr += *fileType;
typeStr += Newline;
os.Stdout.WriteString(typeStr);

//Useless calls
giogolib.LogMessage(def.Debug,"Applicazione partita");
}


Spero di aver mostrato in modo chiaro come Go lang permetta di fornire all'utente che andrà ad utilizzare la nostra applicazione tutti gli strumenti per adattare l'esecuzione del software alle sue esigenze.

Nessun commento: