{"id":626,"date":"2020-08-20T23:08:13","date_gmt":"2020-08-20T21:08:13","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=626"},"modified":"2020-10-30T17:40:32","modified_gmt":"2020-10-30T16:40:32","slug":"tutorial-go-gestione-dei-timer-e-dei-tick","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/08\/tutorial-go-gestione-dei-timer-e-dei-tick\/","title":{"rendered":"TUTORIAL GO &#8211; GESTIONE DEI TIMER E DEI TICK"},"content":{"rendered":"\n<p>Go gestisce il tempo tramite gli oggetti timer e tick. Il timer rappresenta un evento che si verifica una sola volta e si manifesta tramite l&#8217;invio di un dato su un channel ad esso associato.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc main() {\n\n\ttimer := time.NewTimer(time.Second * 2)\n\n\tgo func() {\n\t\t&lt;-timer.C\n\t\tfmt.Println(\"Passati 2 secondi\")\n\t}()\n\n\ttime.Sleep(time.Second * 5)\n}\n<\/pre>\n\n\n\n<p>Nell&#8217;esempio ho definito un timer che scatta dopo 2 secondi e una goroutine che allo scadere del timer dar\u00e0 evidenza a video del tempo trascorso. La goroutine aspetta il valore inviato sul channel, attributo dell&#8217;oggetto timer. Questo meccanismo ci permette di impostare agevolmente dei timeout nel nostro codice.  Tramite la funzione Stop del timer possiamo evitare la sua attivazione.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">go func() {\n\t\ttimer.Stop()\n\t}()<\/pre>\n\n\n\n<p>Qualora si voglia effettuare delle operazioni ad intervalli regolari Go mette a disposizione l&#8217;oggetto Ticker<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\t\tticker := time.NewTicker(time.Second * 1)\n\tgo func() {\n\t\tfor t := range ticker.C {\n\t\t\tfmt.Println(\"Ticker\", t.Second())\n\t\t\tif t.Second() == 10 {\n\t\t\t\tticker.Stop()\n\t\t\t}\n\t\t}\n\t}()<\/pre>\n\n\n\n<p>Nell&#8217;esempio  ho creato un oggetto che inserisce un messaggio nel channel a intervalli regolari di un secondo. Anche il ticker presente una funzione Stop che consente di interrompere l&#8217;esecuzione del ticker.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Go gestisce il tempo tramite gli oggetti timer e tick. Il timer rappresenta un evento che si verifica una sola volta e si manifesta tramite l&#8217;invio di un dato su un channel ad esso associato. Nell&#8217;esempio ho definito un timer che scatta dopo 2 secondi e una goroutine che allo scadere del timer dar\u00e0 evidenza &hellip; <a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/08\/tutorial-go-gestione-dei-timer-e-dei-tick\/\" class=\"more-link\">Continua la lettura di <span class=\"screen-reader-text\">TUTORIAL GO &#8211; GESTIONE DEI TIMER E DEI TICK<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[148],"tags":[105,130,129],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/626"}],"collection":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/comments?post=626"}],"version-history":[{"count":1,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/626\/revisions"}],"predecessor-version":[{"id":627,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/626\/revisions\/627"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=626"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}