<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>switch | www.valeriofinazzo.it</title>
	<atom:link href="http://www.valeriofinazzo.it/wordpress/tag/switch/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.valeriofinazzo.it/wordpress</link>
	<description>Il sito dell&#039;ingegnere Valerio Finazzo</description>
	<lastBuildDate>Fri, 30 Oct 2020 16:42:00 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.3</generator>
	<item>
		<title>TUTORIAL GO &#8211; COSTRUTTI DI CONTROLLO</title>
		<link>http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-costrutti-di-controllo/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 06 Aug 2020 15:22:15 +0000</pubDate>
				<category><![CDATA[GOLANG]]></category>
		<category><![CDATA[defer]]></category>
		<category><![CDATA[for]]></category>
		<category><![CDATA[GO]]></category>
		<category><![CDATA[if/else]]></category>
		<category><![CDATA[switch]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=594</guid>

					<description><![CDATA[<p>Oggi vediamo i costrutti di controllo offerti da GO. I costrutti consentono di configurare il flusso delle operazione sequenziali in base all&#8217;algoritmo stabilito dall&#8217;autore. Si dividono in iterativi e di selezione. FOR il costrutto for è un costrutto iterativo e consente di iterare un comando n volte fino a che è valida la condizione di &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-costrutti-di-controllo/" class="more-link">Continua la lettura di <span class="screen-reader-text">TUTORIAL GO &#8211; COSTRUTTI DI CONTROLLO</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-costrutti-di-controllo/">TUTORIAL GO – COSTRUTTI DI CONTROLLO</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p>Oggi vediamo i costrutti di controllo offerti da GO. I costrutti consentono di configurare il flusso delle operazione sequenziali in base all&#8217;algoritmo stabilito dall&#8217;autore. Si dividono in iterativi e di selezione.</p>



<ul><li>FOR</li></ul>



<p>il costrutto for è un costrutto iterativo e consente di iterare  un comando n volte fino a che è valida la condizione di controllo</p>



<pre class="crayon-plain-tag">package main
import &quot;fmt&quot;
const limite = 5
// Stampa - commento
func main() {
	for i := 0; i &amp;lt; limite; i++ {
		fmt.Println(i)
	}
}</pre>



<p>nel ciclo for ho inizializzato la variabile i con 0 (Non ho esplicitato il tipo perchè Go lo desume da solo), ho definivo la condizione per continuare l&#8217;iterazione (i deve essere minore della costante limite) e ho definito la regola di incremento ( in questo caso i cresce di una unità per ogni iterazione). Rispetto ad altri linguaggi come java non sono richieste parentesi per chiudere i comandi di inizializzazione del for, mentre sono obbligatorie le parentesi {} per racchiudere il blocco di operazioni da effettuare.</p>



<p>La condizione di inizializzazione e la condizione di incremento sono opzionali, pertanto posso scrivere il codice in questo, rendendo il codice equivalente ad un costrutto while.</p>



<pre class="crayon-plain-tag">j := 0
for j &amp;lt; limite {
	fmt.Println(j)
	j = j + 1
}</pre>



<p>Anche la condizione di uscita può essere omessa, ottenendo così un ciclo virtualmente infinito che può essere pilotato tramite il comando break che interrompe l&#8217;esecuzione.</p>



<pre class="crayon-plain-tag">z := 0
for {
	z = z + 1
	fmt.Println(z)
	if z == 5 {
		break
	}
}</pre>



<p>Insieme al comando break può essere usato il comando continue che permette di saltare l&#8217;iterazione corrente e andare alla prossima.</p>



<ul><li>IF</li></ul>



<p>Il costrutto IF è un costrutto di seleziona e consente di eseguire il codice contenuto nelle sue parentesi {} al verificare di una condizione booleana. Se guardate il codice precedente  quando il contatore vale 5 il sistema interrompe il ciclo con il comando break. </p>



<p>Tramite il comando else è possibile definire un blocco di operazioni alternativo ed inoltre è possibile all&#8217;interno del blocco if definire una assegnazione ad una variabile che sarà visibile solo nel blocco if. </p>



<pre class="crayon-plain-tag">z := 0
for {
	z = z + 1
	if d := z; d == 5 {
		fmt.Println(&quot;fine&quot;)
		break
	} else {
		fmt.Println(d)
	}
}</pre>



<p>Nel blocco ho introdotto una variabile d inizializzata con il valore di z e ho definito una condizione alternativa a quella di uscita, grazie alla quale stampo il valore corrente dell&#8217;indice.</p>



<ul><li>SWITCH</li></ul>



<p>Il costrutto switch è un costrutto di selezione e ci viene in aiuto quando dobbiamo gestire la verifica di n possibili valori. Invece di usare tanti if/else annidati lo switch case ci consente di gestire in modo elegante la casistisca descritta.</p>



<pre class="crayon-plain-tag">switch z {
case 1:
	fmt.Println(1)
case 2:
	fmt.Println(2)
case 3, 4:
	fmt.Println(&quot;3 o 4&quot;)
case 1 * 5:
	fmt.Println(&quot;5&quot;)
default:
	fmt.Println(&quot;default&quot;)
}</pre>



<p>Nel blocco sopra sto verificando il valore di z, gestendo le casistiche 1 e 2 con apposito output, per gli altri valori viene stampato il valore default. Quando la condizione viene riscontrata il sistema esegue il codice relativo, a differenza di altri linquaggi come JAVA non è necessario specificare la chiave break. Nella clausola case possono essere presenti più condizioni separate da virgola ed è possibile inserire l&#8217;output di una funzione, l&#8217;importante che il tipo sia dello stesso tipo delle altre clausole.</p>



<p>E&#8217; possibile anche omettere la condizione da verificare ottenendo un modo più elegante per scrivere degli if/else in cascata specificando la regola di ingresso a livello del blocco case. Lo stesso codice di sopra può essere riscritto come segue</p>



<pre class="crayon-plain-tag">switch {
case z == 1:
	fmt.Println(1)
case z == 2:
	fmt.Println(2)
case z == 3 || z == 4:
	fmt.Println(&quot;3 o 4&quot;)
case z == 1*5:
	fmt.Println(&quot;5&quot;)
default:
	fmt.Println(&quot;default&quot;)
}</pre>



<ul><li>DEFER</li></ul>



<p>Il costrutto DEFER è un comando interessante. Consente di eseguire un codice alla fine del programma. Agisce come una pila con una logica di tipo First In Last Out, pertanto il primo comando inserito sarà l&#8217;ultimo ad essere eseguito.</p>



<pre class="crayon-plain-tag">package main

import &quot;fmt&quot;

const limite = 5

func main() {

	defer fmt.Println(&quot;Fatto quello che c'era da fare&quot;)
	defer fmt.Println(&quot;Sto per scrivere il penultimo messaggio&quot;)

	for i := 0; i &amp;lt; limite; i++ {
		fmt.Println(i)
	}

	j := 0
	for j &amp;lt; limite {
		fmt.Println(j)
		j = j + 1
	}

	var z int = 0
	for {
		z = z + 1
		if d := z; d == 5 {
			fmt.Println(&quot;fine&quot;)
			break
		} else {
			fmt.Println(d)
		}
	}

	switch z {
	case 1:
		fmt.Println(1)
	case 2:
		fmt.Println(2)
	case 3, 4:
		fmt.Println(&quot;3 o 4&quot;)
	case 1 * 5:
		fmt.Println(&quot;5&quot;)
	default:
		fmt.Println(&quot;default&quot;)
	}

	switch {
	case z == 1:
		fmt.Println(1)
	case z == 2:
		fmt.Println(2)
	case z == 3 || z == 4:
		fmt.Println(&quot;3 o 4&quot;)
	case z == 1*5:
		fmt.Println(&quot;5&quot;)
	default:
		fmt.Println(&quot;default&quot;)
	}
}</pre>



<p>Ottenendo così l&#8217;output atteso</p>



<pre class="crayon-plain-tag">0
1
2
3
4
0
1
2
3
4
1
2
3
4
fine
5
5
Sto per scrivere il penultimo messaggio
Fatto quello che c'era da fare</pre>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F08%2Ftutorial-go-costrutti-di-controllo%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20COSTRUTTI%20DI%20CONTROLLO" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F08%2Ftutorial-go-costrutti-di-controllo%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20COSTRUTTI%20DI%20CONTROLLO" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F08%2Ftutorial-go-costrutti-di-controllo%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20COSTRUTTI%20DI%20CONTROLLO" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F08%2Ftutorial-go-costrutti-di-controllo%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20COSTRUTTI%20DI%20CONTROLLO" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F08%2Ftutorial-go-costrutti-di-controllo%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20COSTRUTTI%20DI%20CONTROLLO" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F08%2Ftutorial-go-costrutti-di-controllo%2F&#038;title=TUTORIAL%20GO%20%E2%80%93%20COSTRUTTI%20DI%20CONTROLLO" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-costrutti-di-controllo/" data-a2a-title="TUTORIAL GO – COSTRUTTI DI CONTROLLO"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-costrutti-di-controllo/">TUTORIAL GO – COSTRUTTI DI CONTROLLO</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
