<?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>channel | www.valeriofinazzo.it</title>
	<atom:link href="http://www.valeriofinazzo.it/wordpress/tag/channel/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:40:55 +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; GOROUTINES E CHANNEL</title>
		<link>http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-goroutines-e-channel/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 17 Aug 2020 16:18:00 +0000</pubDate>
				<category><![CDATA[GOLANG]]></category>
		<category><![CDATA[channel]]></category>
		<category><![CDATA[GO]]></category>
		<category><![CDATA[goroutine]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=618</guid>

					<description><![CDATA[<p>Go supporta i thread per la gestione di processi asincroni e lo fa in un modo estremamente semplice. Go usa la parola chiave go per avviare una function in modalità asincrona. Nell&#8217;esempio ho definito la func hello che si limita a stampare a video il classico messaggio &#8220;ciao mondo&#8221; e per invocarne l&#8217;esecuzione chiamo la &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-goroutines-e-channel/" class="more-link">Continua la lettura di <span class="screen-reader-text">TUTORIAL GO &#8211; GOROUTINES E CHANNEL</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-goroutines-e-channel/">TUTORIAL GO – GOROUTINES E CHANNEL</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p>Go supporta i thread per la gestione di processi asincroni e lo fa in un modo estremamente semplice. Go usa la parola chiave go per avviare una function in modalità asincrona.</p>



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

import (
	&quot;fmt&quot;
	&quot;time&quot;
)

func hello() {
	fmt.Println(&quot;ciao mondo&quot;)
}

func main() {

	hello()

	go hello()

	go func() {
		hello()
	}()

	time.Sleep(time.Second * 3)
}</pre>



<p>Nell&#8217;esempio ho definito la func hello che si limita a stampare a video il classico messaggio &#8220;ciao mondo&#8221; e per invocarne l&#8217;esecuzione chiamo la function anteponendo la parola chiave go, con cui avvio un thread dedicato per l&#8217;esecuzione. Notate che ho importato il package time con cui ho impostato un attesa di 5 secondi per vedere il messaggio stampato altrimenti il programma avrebbe finito la sua esecuzione e non avremmo visto niente a schermo. Con semplicità ho gestito in maniera asincrona una funzione che non lo era. La parola chiave go può essere applicata anche a funzioni anonime ottenendo lo stesso effetto.</p>



<p>Le goroutines comunicano tra di loro tramite i channel,canali di comunicazioni monodirezionali detti in informatica pipe. Per creare una pipe si usa la parola chiave make seguito dalla parola chiave chan e il tipo di dato gestito. L&#8217;invio o la ricezione del dato avviene tramite la parola chiave -&gt; e &lt;-</p>



<pre class="crayon-plain-tag">messaggi := make(chan string)
	go func() {
		time.Sleep(time.Second * 3)
		messaggi &amp;lt;- &quot;ciao&quot;
	}()
	msg := &amp;lt;-messaggi
	fmt.Println(msg)</pre>



<p>Nell&#8217;esempio ho creato un chanel che accetta stringhe e nella goroutine anonima ho inviato la stringa &#8220;ciao&#8221; tramite il comando channel &lt;-  con un ritardo di 3 secondi.  Con il comando &lt;- channel effettuo la lettura del dato e in questo caso non  è stato necessario gestire ritardi e sincronizzazione perchè l&#8217;esecuzione del codice si interrompe in attesa della lettura del flusso dal channel.</p>



<p>Go mette a disposizione i channel con buffer, ovvero channel che possono ricevere più di un valore in attesa che poi venga letti. La sintassi prevede la dimensione del buffer successivamente al tipo gestito.</p>



<pre class="crayon-plain-tag">messaggiBufferend := make(chan string, 2)
	messaggiBufferend &amp;lt;- &quot;Ciao&quot;
	messaggiBufferend &amp;lt;- &quot;Mondo&quot;</pre>



<p>Nell&#8217;esempio ho creato un channel con dimensione del buffer pari a 2 e su questo ho inviato 2 messaggi separati.</p>



<p>Grazie ai channel è possibile sincronizzare i processi visto che i channel bloccano l&#8217;esecuzione dei comandi stando in attesa di un valore.</p>



<pre class="crayon-plain-tag">func worker(channel chan string) {
	time.Sleep(time.Second * 3)
	channel &amp;lt;- &quot;fine&quot;
}
main () {
	canale := make(chan string)
	go worker(canale)
	msg2 := &amp;lt;-canale
	fmt.Println(msg2)
}</pre>



<p>Nell&#8217;esempio ho creato una funzione worker  che attende 3 secondi prima di comunicare la fine sul channel ricevuto come parametro. Nel main avvia la goroutine con il worker e resto in attesa dell&#8217;esito della elaborazione per chiudere l&#8217;esecuzione.</p>



<p>E&#8217; possibile stabilire in sede di passaggio di una channel ad una funzione la direzione del channel, ovvero specificare se è abilitata l&#8217;invio o la ricezione </p>



<pre class="crayon-plain-tag">func chiamante(channel chan&amp;lt;- string) {
	channel &amp;lt;- &quot;sono il ricevente&quot;
}

func ricevente(channel &amp;lt;-chan string) {
	fmt.Println(&amp;lt;-channel)
}
main () {
	can := make(chan string)
	go chiamante(can)
	go ricevente(can)
}</pre>



<p>Nell&#8217;esempio ho definito una funzione chiamante che accetta un channel su cui inviare solo dati, una finzione ricevente che accetta un channel che riceve solo dati e nel main ho lanciato le go routine associate.</p>



<p>Nel prossimo articolo vedremo altre funzioni collegate ai channel</p>
<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-goroutines-e-channel%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20GOROUTINES%20E%20CHANNEL" 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-goroutines-e-channel%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20GOROUTINES%20E%20CHANNEL" 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-goroutines-e-channel%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20GOROUTINES%20E%20CHANNEL" 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-goroutines-e-channel%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20GOROUTINES%20E%20CHANNEL" 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-goroutines-e-channel%2F&amp;linkname=TUTORIAL%20GO%20%E2%80%93%20GOROUTINES%20E%20CHANNEL" 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-goroutines-e-channel%2F&#038;title=TUTORIAL%20GO%20%E2%80%93%20GOROUTINES%20E%20CHANNEL" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-goroutines-e-channel/" data-a2a-title="TUTORIAL GO – GOROUTINES E CHANNEL"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2020/08/tutorial-go-goroutines-e-channel/">TUTORIAL GO – GOROUTINES E CHANNEL</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
