Se il file è abbastanza piccolo la soluzione più semplice è quello di utilizzare in combinazione con ioutil.WriteFileioutil.ReadAll:
resp, err := http.Get("your url")
bytes, err := ioutil.ReadAll(resp.Body)
err = ioutil.WriteFile(filename, bytes, 0666)
Se il file non è così piccolo, è meglio evitare di creare e riempire il bytes
array. Poi si dovrebbe usare io.Copy che copia semplicemente i byte dal lettore allo scrittore:
resp, err := http.Get("your url")
f, err := os.Create(filename)
defer f.Close()
_, err := io.Copy(f, resp.Body)
è necessario aggiungere il relativo movimentazione in entrambi i casi di errore.
fonte
2013-06-25 18:56:25
Vorrei davvero togliere importanza a 'ioutil.ReadAll' - non è quasi mai quello che vuoi fare in un'applicazione ben educata. – Dustin
@Dustin Se il file è abbastanza piccolo, penso che non importi. Pensi che dovrei porre più enfasi su questo punto? –
Non sono d'accordo con te, ma forse la versione io.Copy dovrebbe essere la prima. Penso che il tuo codice e il tuo ragionamento abbiano entrambi ragione (anche se potrei fare qualcosa di sgradevole al tuo programma). Ho solo paura che vedrò più persone che fanno la cosa "tira tutto in memoria". – Dustin