In Go un'applicazione è organizzata in pacchetti. Un pacchetto è una raccolta di file sorgente che si trovano nella stessa cartella. Tutti i file sorgente di una cartella devono avere lo stesso nome di pacchetto in cima al file. Per convenzione, i pacchetti prendono il nome della cartella in cui si trovano.
package greeting
Go fornisce un'ampia libreria standard di pacchetti, che puoi usare con la parola chiave import.
I pacchetti della libreria standard si importano usando il loro nome.
package greeting
import "fmt"
A un pacchetto importato ci si riferisce poi con il nome del pacchetto:
world := "World"
fmt.Sprintf("Hello %s", world)
Go stabilisce se un elemento può essere chiamato dal codice di altri pacchetti in base a come è dichiarato. Per rendere una funzione, un tipo, una variabile, una costante o un campo di una struct visibile dall'esterno (noto come exported), il nome deve iniziare con una lettera maiuscola.
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
Go fornisce un pacchetto integrato chiamato fmt (il pacchetto di formattazione), che offre varie funzioni per manipolare il formato dell'input e dell'output.
La funzione più usata è Sprintf, che usa verbi come %s per interpolare valori in una stringa e restituisce quella stringa.
import "fmt"
food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco
In Go, i numeri in virgola mobile si formattano comodamente con i verbi di Sprintf: %g (rappresentazione compatta), %e (esponente) o %f (senza esponente).
Tutti e tre i verbi permettono di controllare la larghezza del campo e la posizione numerica.
import "fmt"
number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32
Puoi trovare un elenco completo dei verbi disponibili nella documentazione del pacchetto format.
fmt contiene altre funzioni per lavorare con le stringhe, come Println, che si limita a stampare sulla console gli argomenti che riceve, e Printf, che formatta l'input allo stesso modo di Sprintf prima di stamparlo.
C'era una volta un programmatore eccentrico che viveva in una strana casa con le finestre sbarrate. Un giorno accettò un incarico da un portale di annunci online per costruire un robot da festa. Il robot dovrebbe accogliere gli invitati e accompagnarli ai loro posti. La prima edizione era molto tecnica e mostrava la scarsa capacità del programmatore di interagire con gli esseri umani. E parte di tutto ciò è finito anche nell'edizione successiva.
Implementa la funzione Welcome in modo che restituisca un messaggio di benvenuto usando il nome fornito:
Welcome("Christiane")
// => Welcome to my party, Christiane!
Implementa la funzione HappyBirthday in modo che restituisca un messaggio di auguri usando il nome e l'età della persona.
Purtroppo il programmatore è un po' un esibizionista, quindi il robot deve dimostrare di conoscere il compleanno di ogni invitato.
HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!
Implementa la funzione AssignTable per indicare la direzione.
Dovrebbe accettare 5 parametri.
string)int)string)string)float64)Il formato esatto del risultato si può vedere nell'esempio qui sotto.
Il robot fornisce il numero del tavolo in un formato a 3 cifre. Se il numero ha meno di 3 cifre, riceve degli zeri iniziali aggiuntivi per arrivare a 3 cifre (ad esempio 3 diventa 003). Il robot menziona anche la distanza del tavolo. Fortunatamente solo con una precisione limitata a 1 cifra.
AssignTable("Christiane", 27, "Frank", "on the left", 23.7834298)
// =>
// Welcome to my party, Christiane!
// You have been assigned to table 027. Your table is on the left, exactly 23.8 meters from here.
// You will be sitting next to Frank.
Iscriviti a Exercism per imparare e padroneggiare Go con 34 concetti165 esercizi e il mentoring di persone reali, tutto gratis.