{"id":628,"date":"2020-08-29T10:29:36","date_gmt":"2020-08-29T08:29:36","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=628"},"modified":"2020-10-30T17:40:23","modified_gmt":"2020-10-30T16:40:23","slug":"tutorial-go-lettura-e-scrittura-dei-file","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/08\/tutorial-go-lettura-e-scrittura-dei-file\/","title":{"rendered":"TUTORIAL GO &#8211; LETTURA E SCRITTURA DEI FILE"},"content":{"rendered":"\n<p>Dopo aver visto le caratteristiche di Go cominciamo a vedere alcuni casi d&#8217;uso tipici dello sviluppo.  Iniziamo con la lettura e la scrittura dei file.<\/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\"bufio\"\n\t\"fmt\"\n\t\"io\/ioutil\"\n\t\"os\"\n)\n\nfunc main() {\n\n\tnuovofile, errore := os.Create(\"miofile.txt\")\n\tif errore == nil {\n\t\tfmt.Println(\"File creato: \", nuovofile.Name())\n\t} else {\n\t\tfmt.Println(\"Errore: \", errore)\n\t\tpanic(errore)\n\t}\n\tnuovofile.WriteString(\"ciao a tutti\")\n\n\tmyWriter := bufio.NewWriter(nuovofile)\n\tmyWriter.WriteString(\"\\nciao a tutti\")\n\tmyWriter.Flush()\n\tnuovofile.Close()\n\tfmt.Println(\"File popolato\")\n\n\tnuovofile, errore = os.Open(\"miofile.txt\")\n\tif errore == nil {\n\t\tmyslice := make([]byte, 100)\n\t\tn1, _ := nuovofile.Read(myslice)\n\t\tfmt.Println(\"char letti\", n1)\n\t\tnuovofile.Seek(10, 0)\n\t\tn1, _ = nuovofile.Read(myslice)\n\t\tfmt.Println(\"char letti\", n1)\n\t} else {\n\t\tpanic(errore)\n\t}\n\n\tnuovofile.Seek(0, 0)\n\tmyReader := bufio.NewReader(nuovofile)\n\tlettura, _, errore := myReader.ReadLine()\n\tif errore == nil {\n\t\tfmt.Println(string(lettura))\n\t} else {\n\t\tfmt.Println(errore)\n\t}\n\tnuovofile.Close()\n\n\ttxt, errore := ioutil.ReadFile(nuovofile.Name())\n\tif errore == nil {\n\t\tfmt.Println(\"File letto: \", nuovofile.Name(), \"->\", string(txt))\n\t}\n\n\terrore = os.Remove(nuovofile.Name())\n\tif errore == nil {\n\t\tfmt.Println(\"File rimosso: \", nuovofile.Name())\n\t} else {\n\t\tfmt.Println(\"Errore: \", errore)\n\t}\n\n}\n<\/pre>\n\n\n\n<p>Come si pu\u00f2 vedere ho introdotto nuovi package: os, io\/ioutil e bufio. os \u00e8 il package che offre  i metodi per la creazione e cancellazione dei file, ioutil offre  funzioni per la manipolazione del file e bufio offre metodi bufferizzati per la lettura e scrittura<\/p>\n\n\n\n<p>Nell&#8217;esempio in sequenza creo il file, lo popolo, ne leggo il contenuto e poi lo rimuovo dal file system.<\/p>\n\n\n\n<p>nuovofile, errore := os.Create(&#8220;miofile.txt&#8221;) crea un file di nome miofile.txt nella directory dove eseguo il file .go. Il metodo Create restituisce 2 variabili, la prima di tipo file e la seconda di tipo Error che sar\u00e0 valorizzato con il messaggio di errore se l&#8217;operazione non \u00e8 possibile. Successivamente per popolare il file uso il metodo writestring della classe File e aggiungo ulteriore testo utilizzando un Writer offerto dal package bufio. Il writer bufferizzato migliora le prestazioni in caso di molte operazioni di scrittura e le rende effettive con il metodo flush, Infine con il close rendo il file disponibile per altre manipolazioni.<\/p>\n\n\n\n<p>nuovofile, errore = os.Open(&#8220;miofile.txt&#8221;) apre il file con il nome passato come parametro e lo cerca nella directory dove il file go viene lanciato. Restituisce un oggetto di tipo file e l&#8217;eventuale errore.  La lettura del contenuto pu\u00f2 essere fatta in vari modi. La funzione Read legge il contenuto e lo salva in uno slice, restituendo in uscita il numero di caratteri letti. La funzione Seek consente di spostare il punto di inizio di lettura del file. Anche per la lettura il bufio ci mette a disposizione il reader che consente di effettuare le letture  sfruttando il buffer in memoria.  Il package ioutil mette a disposizione delle funzioni che agevolano l&#8217;operazione di lettura, es. txt, errore := ioutil.ReadFile(nuovofile.Name()), restituisce il contenuto del file in una variabile di tipo []byte.<\/p>\n\n\n\n<p>Infine per cancellare il file il package io mette a disposizione la funzione Remove che riceve in ingresso il nome del file.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dopo aver visto le caratteristiche di Go cominciamo a vedere alcuni casi d&#8217;uso tipici dello sviluppo. Iniziamo con la lettura e la scrittura dei file. Come si pu\u00f2 vedere ho introdotto nuovi package: os, io\/ioutil e bufio. os \u00e8 il package che offre i metodi per la creazione e cancellazione dei file, ioutil offre funzioni &hellip; <a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/2020\/08\/tutorial-go-lettura-e-scrittura-dei-file\/\" class=\"more-link\">Continua la lettura di <span class=\"screen-reader-text\">TUTORIAL GO &#8211; LETTURA E SCRITTURA DEI FILE<\/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":[131,105],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/628"}],"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=628"}],"version-history":[{"count":1,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/628\/revisions"}],"predecessor-version":[{"id":629,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/628\/revisions\/629"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=628"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}