{"id":613,"date":"2020-08-11T16:27:41","date_gmt":"2020-08-11T14:27:41","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=613"},"modified":"2020-10-30T17:41:12","modified_gmt":"2020-10-30T16:41:12","slug":"tutorial-go-metodi-e-interfacce","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/08\/tutorial-go-metodi-e-interfacce\/","title":{"rendered":"TUTORIAL GO &#8211; METODI E INTERFACCE"},"content":{"rendered":"\n<p>Go non consente di definire le classi ma consente di definire dei metodi disponibili per una struttura.<\/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 \"fmt\"\n\n\/\/Persona - commento\ntype Persona struct {\n\tnome    string\n\tcognome string\n}\n\nfunc (p Persona) iniziali() {\n\tfmt.Println(p.nome[0:1] + p.cognome[0:1])\n}\n\nfunc main() {\n\tvar io = Persona{\"Valerio\", \"Finazzo\"}\n\tio.iniziali()\n}<\/pre>\n\n\n\n<p>Nel blocco sopra ho definito una struttura Persona che contiene nome e cognome.  Per definire un metodo si usa una sintassi simile alla definizione di una funzione. Si usa la parola chiave func, definita dalla struttura cui si applica, il nome del metodo, la lista dei parametri che riceve in ingresso e l&#8217;eventuale output. Nello specifico ho definito un metodo iniziali che stampa le iniziali della persona.<\/p>\n\n\n\n<p>Nell&#8217;esempio di sopra il metodo definito sfrutta il passaggio per valore, ovvero il metodo opera su una copia della struttura persona senza modificare i valori dell&#8217;istanza di partenza. Per ovviare a questo Go mette a disposizione il passaggio per riferimento, che si ottiene specificando il puntatore alla struttura.<\/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=\"\">func (p *Persona) inverti() {\n\tvar nome, cognome string\n\tnome = p.nome\n\tcognome = p.cognome\n\tp.cognome = nome\n\tp.nome = cognome\n}<\/pre>\n\n\n\n<p>Con questo approccio invocando il metodo iniziali si avr\u00e0 l&#8217;effetto desiderato. In assenza del puntatore non si avrebbe l&#8217;effetto atteso.<\/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=\"\">func main() {\n\tvar io = Persona{\"Valerio\", \"Finazzo\"}\n\tio.iniziali()\n\tio.inverti()\n\tio.iniziali()\n}<\/pre>\n\n\n\n<p>Go mette a disposizione anche il costrutto interfaccia, ovvero permette di definire una lista di metodi che le strutture devono implementare<\/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=\"\">\/\/Familiare - commento\ntype Familiare interface {\n\tiniziali()\n}<\/pre>\n\n\n\n<p>In questo caso ho definito una interfaccia Familiare che prevede il metodo iniziali, pertanto posso invocare il metodo iniziali su una variabile che implementa l&#8217;interfaccia Familiare<\/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=\"\">\tvar nuovoio Familiare = Persona{\"Valerio\", \"Finazzo\"}\n\tnuovoio.iniziali()<\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Go non consente di definire le classi ma consente di definire dei metodi disponibili per una struttura. Nel blocco sopra ho definito una struttura Persona che contiene nome e cognome. Per definire un metodo si usa una sintassi simile alla definizione di una funzione. Si usa la parola chiave func, definita dalla struttura cui si &hellip; <a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/08\/tutorial-go-metodi-e-interfacce\/\" class=\"more-link\">Continua la lettura di <span class=\"screen-reader-text\">TUTORIAL GO &#8211; METODI E INTERFACCE<\/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":[118,120,119],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/613"}],"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=613"}],"version-history":[{"count":1,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/613\/revisions"}],"predecessor-version":[{"id":614,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/613\/revisions\/614"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=613"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}