Skip to content

Commit 6fbe8c1

Browse files
authored
save
1 parent b861517 commit 6fbe8c1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+3369
-0
lines changed

content/it/docs/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Go by Example - IT
2+
3+
[Go](http://golang.org/) è un linguaggio di programmazione open source ideato per la creazione di software semplice, veloce e efficiente.
4+
5+
*Go by Example - IT* è una introduzione pratica a Go che utilizza programmi di esempio commentati con adeguate spiegazioni. Dai un'occhiata al [primo esempio](hello-world.md) o cerca nella lista intera qui di seguito.
6+
7+
Quella che vedi è la traduzione italiana del progetto *Go by Example* ([gobyexample.com](http://gobyexample.jcbhmr.com/)), realizzata dalla community italiana di golang ([golang-it](http://golangit.github.io/)).
8+
9+
<br>
10+
11+
<style>
12+
/* Make draft links from included SUMMARY.md on README.md non-clickable. */
13+
#content a[href=""] {
14+
color: var(--sidebar-non-existant);;
15+
text-decoration: none;
16+
cursor: default;
17+
pointer-events: none;
18+
}
19+
</style>
20+
21+
{{#include SUMMARY.md:7:}}

content/it/docs/SUMMARY.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Summary
2+
3+
[Go by Example - IT](README.md)
4+
5+
---
6+
7+
- [Hello World](hello-world.md)
8+
- [Valori](valori.md)
9+
- [Variabili](variabili.md)
10+
- [Costanti](costanti.md)
11+
- [For](for.md)
12+
- [If/Else](if-else.md)
13+
- [Switch](switch.md)
14+
- [Array](array.md)
15+
- [Slice](slice.md)
16+
- [Map](map.md)
17+
- [Range](range.md)
18+
- [Funzioni](funzioni.md)
19+
- [Multipli Valori Restituiti](multipli-valori-restituiti.md)
20+
- [Funzioni Variadiche](funzioni-variadiche.md)
21+
- [Chiusure](chiusure.md)
22+
- [Ricorsione](ricorsione.md)
23+
- [Puntatori](puntatori.md)
24+
- [Struct](struct.md)
25+
- [Metodi](metodi.md)
26+
- [Interfacce](interfacce.md)
27+
- [Errori](errori.md)
28+
- [Goroutine](goroutine.md)
29+
- [Channel](channel.md)
30+
- [Channel con Buffer](channel-con-buffer.md)
31+
- [Sincronizzazione Dei Channel](sincronizzazione-dei-channel.md)
32+
- [Direzioni Dei Channel](direzioni-dei-channel.md)
33+
- [Select](select.md)
34+
- [Timeout](timeout.md)
35+
- [Operazioni Su Channel Non Bloccanti](operazioni-su-channel-non-bloccanti.md)
36+
- [Chiudere Channel](chiudere-channel.md)
37+
- [Range sui Channel](range-sui-channel.md)
38+
- [Timer](timer.md)
39+
- [Ticker](ticker.md)
40+
- [Worker Pool](worker-pool.md)
41+
- [Rate Limiting](rate-limiting.md)
42+
- [Contatori Atomici](contatori-atomici.md)
43+
- [Mutex](mutex.md)
44+
- [Gestione dello Stato con Goroutine](gestione-dello-stato-con-goroutine.md)
45+
- [Ordinamento](ordinamento.md)
46+
- [Ordinamento con Funzioni](ordinamento-con-funzioni.md)
47+
- [Panic](panic.md)
48+
- [Defer](defer.md)
49+
- [Funzioni per Collezioni](funzioni-per-collezioni.md)
50+
- [Funzioni per Stringhe](funzioni-per-stringhe.md)
51+
- [Formattazione di stringhe](formattazione-di-stringhe.md)
52+
- [Espressioni Regolari](espressioni-regolari.md)
53+
- [JSON](json.md)
54+
- [Tempo](tempo.md)
55+
- [Epoch](epoch.md)
56+
- [Formattazione / Parsing del Tempo](formattazione-parsing-del-tempo.md)
57+
- [Numeri Casuali](numeri-casuali.md)
58+
- [Parsing di Numeri](parsing-di-numeri.md)
59+
- [Parsing di URl](parsing-di-url.md)
60+
- [Hash SHA1](hash-sha1.md)
61+
- [Codifica Base64](codifica-base64.md)
62+
- [Leggere File](leggere-file.md)
63+
- [Scrivere File](scrivere-file.md)
64+
- [Line Filter](line-filter.md)
65+
- [Argomenti della Linea di Comando](argomenti-della-linea-di-comando.md)
66+
- [Command-Line Flag](command-line-flag.md)
67+
- [Variabili d'Ambiente](variabili-dambiente.md)
68+
- [Eseguire Sottoprocessi](eseguire-sottoprocessi.md)
69+
- [Rimpiazzare il Processo](rimpiazzare-il-processo.md)
70+
- [Segnali](segnali.md)
71+
- [Exit](exit.md)

content/it/docs/errori.md

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# Errori
2+
```go
3+
// In Go si è soliti comunicare errori attraverso un
4+
// valore restituito esplicito e separato. Questo
5+
// diversamente sia da quanto accade con le eccezioni
6+
// usate in linguaggi come Java e Ruby che dall'overloading
7+
// di un singolo valore come risultato / errore
8+
// che è a volte usato in C. L'approccio
9+
// usato da Go rende facile capire quali funzioni possono
10+
// generare errori e gestirli attraverso gli stessi
11+
// costrutti utilizzati per qualsiasi altra attività che
12+
// non riguardi la gestione degli errori.
13+
14+
package main
15+
16+
import "errors"
17+
import "fmt"
18+
19+
// Per convenzione, gli errori sono l'ultimo valore
20+
// restituito, ed il loro tipo è `error`,
21+
// un'interfaccia built-in.
22+
func f1(arg int) (int, error) {
23+
if arg == 42 {
24+
25+
// `errors.New` crea un errore base con il
26+
// messaggio di errore dato.
27+
err := errors.New("impossibile calcolare con 42")
28+
return -1, err
29+
30+
}
31+
32+
// Un `nil` nella posizione dell'errore indica che non
33+
// vi è stato alcun errore.
34+
return arg + 3, nil
35+
}
36+
37+
// È possibile usare altri tipi come `error`
38+
// implementando il metodo `Error()` su di essi. Di
39+
// seguito una variante del precedente esempio che
40+
// usa un tipo a sé per rappresentare esplicitamente un
41+
// errore di parametri.
42+
type argError struct {
43+
arg int
44+
prob string
45+
}
46+
47+
func (e *argError) Error() string {
48+
return fmt.Sprintf("%d - %s", e.arg, e.prob)
49+
}
50+
51+
func f2(arg int) (int, error) {
52+
if arg == 42 {
53+
54+
// In questo caso, usiamo la sintassi
55+
// `&argError` per costruire una nuova struct ed
56+
// inserire i valori dei due campi, `arg` e `prob`.
57+
return -1, &argError{arg, "impossibile calcolare"}
58+
}
59+
return arg + 3, nil
60+
}
61+
62+
func main() {
63+
64+
// I due cicli che seguono provano ognuna delle nostre
65+
// funzioni che restituiscono un errore. Nota che l'uso di
66+
// un controllo di errori sulla stessa linea dell'`if`
67+
// è una pratica comune in Go.
68+
for _, i := range []int{7, 42} {
69+
if r, e := f1(i); e != nil {
70+
fmt.Println("f1 ha fallito :", e)
71+
} else {
72+
fmt.Println("f1 ha funzionato:", r)
73+
}
74+
}
75+
for _, i := range []int{7, 42} {
76+
if r, e := f2(i); e != nil {
77+
fmt.Println("f2 ha fallito :", e)
78+
} else {
79+
fmt.Println("f2 ha funzionato:", r)
80+
}
81+
}
82+
83+
// Se vuoi utilizzare qualche campo specifico di
84+
// un errore personalizzato, devi convertire
85+
// l'errore in un'istanza dell'errore personalizzato
86+
// tramite un type assertion.
87+
_, e := f2(42)
88+
if ae, ok := e.(*argError); ok {
89+
fmt.Println(ae.arg)
90+
fmt.Println(ae.prob)
91+
}
92+
}
93+
```
94+
```sh
95+
$ go run errors.go
96+
f1 ha funzionato: 10
97+
f1 ha fallito : impossibile calcolare con 42
98+
f2 ha funzionato: 10
99+
f2 ha fallito : 42 - impossibile calcolare
100+
42
101+
impossibile calcolare
102+
103+
# Dai un'occhiata a questo [ottimo post](http://blog.golang.org/2011/07/error-handling-and-go.html)
104+
# sul blog di Go per ulteriori informazioni sulla gestione
105+
# degli errori.
106+
```
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# Eseguire Sottoprocessi
2+
```go
3+
// Talvolta i programmi Go hanno bisogno di far partire
4+
// altri processi, che possono non essere scritti in Go. Ad esempio
5+
// l'highlight della sintassi in questo sito è [realizzata](https://github.com/golangit/gobyexample-it/blob/master/tools/generate.go)
6+
// facendo partire un processo [`pygmentize`](http://pygments.org/)
7+
// da un programma Go.
8+
// Vediamo qualche esempio su come poter eseguire processi
9+
// arbitrari da Go.
10+
package main
11+
12+
import "fmt"
13+
import "io/ioutil"
14+
import "os/exec"
15+
16+
func main() {
17+
18+
// Inizieremo con un programma semplice, che non ha argomenti
19+
// o input ma che stampa solamente sul stdout. La funzione
20+
// `exec.Command` è un helper che rappresenta il processo
21+
// che andremo ad eseguire
22+
dateCmd := exec.Command("date")
23+
24+
// Tramite la funzione `.Output` è possibile eseguire il
25+
// processo, attendere che finisca ed ottenere il output.
26+
// Se non ci sono stati errori `dateOut` conterrà i byte
27+
// della data.
28+
dateOut, err := dateCmd.Output()
29+
if err != nil {
30+
panic(err)
31+
}
32+
fmt.Println("> date")
33+
fmt.Println(string(dateOut))
34+
35+
// Adesso vedremo un esempio leggermente più complesso
36+
// dove forniremo alcuni dati sullo stdin di un processo,
37+
// e raccoglieremo il suo output sullo stdout.
38+
grepCmd := exec.Command("grep", "ciao")
39+
40+
// Qui possiamo vedere come ottenere lo stdin e lo stdout
41+
// di un futuro comando, scrivere dei dati sullo stdin,
42+
// leggere dei dati dallo stdout e attendere che il processo
43+
// termini.
44+
grepIn, _ := grepCmd.StdinPipe()
45+
grepOut, _ := grepCmd.StdoutPipe()
46+
grepCmd.Start()
47+
grepIn.Write([]byte("ciao grep\naddio grep"))
48+
grepIn.Close()
49+
grepBytes, _ := ioutil.ReadAll(grepOut)
50+
grepCmd.Wait()
51+
52+
// Abbiamo tralasciato il controllo degli errori nelle
53+
// righe precedenti, ma ricordiamoci che possiamo usare
54+
// il classico pattern `if err != nil` per tutti loro.
55+
// Ci limitiamo inoltre a leggere dallo `StdoutPipe`,
56+
// ma potremmo leggere anche da `StderrPipe` nello stesso
57+
// identico modo.
58+
fmt.Println("> grep hello")
59+
fmt.Println(string(grepBytes))
60+
61+
// Nota che per eseguire processi con flag e parametri
62+
// è necessario passare un array che li contenga, non è
63+
// possibile passare semplicemente una stringa.
64+
// Se si vuole eseguire un processo passando la sua stringa
65+
// è possibile utilizzare il comando `bash` con il
66+
// flag `-c` e passare la stringa del processo da eseguire.
67+
lsCmd := exec.Command("bash", "-c", "ls -a -l -h")
68+
lsOut, err := lsCmd.Output()
69+
if err != nil {
70+
panic(err)
71+
}
72+
fmt.Println("> ls -a -l -h")
73+
fmt.Println(string(lsOut))
74+
}
75+
```
76+
```sh
77+
# Il processo eseguito stampa lo stesso output
78+
# che avrebbe stampato se lo avessimo eseguito
79+
# direttamente da terminale
80+
$ go run spawning-processes.go
81+
> date
82+
Wed Oct 10 09:53:11 PDT 2012
83+
84+
> grep ciao
85+
ciao grep
86+
87+
> ls -a -l -h
88+
drwxr-xr-x 4 mark 136B Oct 3 16:29 .
89+
drwxr-xr-x 91 mark 3.0K Oct 3 12:50 ..
90+
-rw-r--r-- 1 mark 1.3K Oct 3 16:28 spawning-processes.go
91+
```

0 commit comments

Comments
 (0)