{"id":601,"date":"2020-08-07T16:59:39","date_gmt":"2020-08-07T14:59:39","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=601"},"modified":"2020-10-30T17:41:45","modified_gmt":"2020-10-30T16:41:45","slug":"tutorial-go-tipi-complessi-structs-e-pointer","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/08\/tutorial-go-tipi-complessi-structs-e-pointer\/","title":{"rendered":"TUTORIAL GO &#8211; TIPI COMPLESSI STRUCTS E POINTER"},"content":{"rendered":"\n<p>Nell&#8217;articolo precedente abbiamo visto i tipi semplici messi a disposizione da GO, in questo vediamo come definire delle strutture dati pi\u00f9 complesse. Go mette a disposizione il comando type che consente di definire delle strutture, ovvero collezioni di dati<\/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\ntype persona struct {\n\tnome    string\n\tcognome string\n}\n\nfunc main() {\n\n\tvar io persona\n\tio.cognome = \"finazzo\"\n\tio.nome = \"valerio\"\n\tfmt.Println(io)\n\tvar sempreio = persona{\"valerio\", \"finazzo\"}\n\tfmt.Println(sempreio)\n\tvar ancoraio = persona{nome: \"valerio\", cognome: \"finazzo\"}\n\tfmt.Println(ancoraio)\n}<\/pre>\n\n\n\n<p>Tramite il comando<em> type persona struct<\/em> ho definito una struttura dati chiamata persona che presenta 2 attributi nome e cognome di tipo string. Nel main ho instanziato la variabile persona e valorizzato gli attributi opportunamente usando il . per accedere alle sue varibili. Go permette di inizializzare direttamente l&#8217;oggetto tramite il nome stesso della struttura passando direttamente i valori, oppure specificando i valori con la coppia nome valore separati da :.<\/p>\n\n\n\n<p>Go supporta i puntatori, ovvero il riferimento a zone di memoria per accedere al valore contenuto in esso. I comandi per gestire i puntatori sono * e &amp;.<\/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 puntatoreame *persona = &amp;io\n\tfmt.Println(puntatoreame.nome, puntatoreame.cognome)\n\tpuntatoreame.cognome = \"finazzo2\"\n\tfmt.Println(puntatoreame.nome, puntatoreame.cognome)\n\tfmt.Println(io.nome, io.cognome)\n\n\tvar nuovamenteio persona = io\n\tfmt.Println(nuovamenteio)\n\tnuovamenteio.cognome = \"finazzo3\"\n\tfmt.Println(nuovamenteio.nome, nuovamenteio.cognome)\n\tfmt.Println(io.nome, io.cognome)<\/pre>\n\n\n\n<p>Tramite * definisco un puntatore verso una struttura di tipo persona e tramite &amp; la inizializzo verso la zona di memoria occupata dalla struttura io. A questo punto agisco su uno degli attributi di puntatoreame e vedr\u00f2 le modifiche attive anche su io.<\/p>\n\n\n\n<p>Il blocco successivo che non usa i puntatori crea una nuova variabile che ha gli stessi valori ma le modifiche che faccio successivamente non si ripercuotono sulla istanza io.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nell&#8217;articolo precedente abbiamo visto i tipi semplici messi a disposizione da GO, in questo vediamo come definire delle strutture dati pi\u00f9 complesse. Go mette a disposizione il comando type che consente di definire delle strutture, ovvero collezioni di dati Tramite il comando type persona struct ho definito una struttura dati chiamata persona che presenta 2 &hellip; <a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/08\/tutorial-go-tipi-complessi-structs-e-pointer\/\" class=\"more-link\">Continua la lettura di <span class=\"screen-reader-text\">TUTORIAL GO &#8211; TIPI COMPLESSI STRUCTS E POINTER<\/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,111,112,110,113],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/601"}],"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=601"}],"version-history":[{"count":4,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/601\/revisions"}],"predecessor-version":[{"id":605,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/601\/revisions\/605"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=601"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}