2013-06-25 19 views
5

Aşağıda, bana bir yanıt sınıfı veren bir şey yapabilirim, ancak bir dosyaya io.reader'ı nasıl yazacağından tam olarak emin değilim. En basit yol nedir? Daha iyi oluşturma ve bytes dolum kaçının ediyorum, dosya o kadar küçük değildirBir dosyayı indirmenin en kolay yolu?

resp, err := http.Get("your url") 
bytes, err := ioutil.ReadAll(resp.Body) 
err = ioutil.WriteFile(filename, bytes, 0666) 

ise: Dosya küçükse

http.Get("https://www.domain.com/some.jpg") 

cevap

8

yeterince kolay çözüm ioutil.WriteFileioutil.ReadAll ile kombine kullanmaktır dizi. Sonra yazar okuyucudan io.Copy hangi basitçe kopya bayt kullanmalıdır:

resp, err := http.Get("your url") 
f, err := os.Create(filename) 
defer f.Close() 
_, err := io.Copy(f, resp.Body) 

Her iki durumda da işleme uygun hatayı eklemelisiniz.

+0

Gerçekten de ioutil.ReadAll' 'i göz önünde bulundurmak isterim - bu, iyi huylu bir uygulamada yapmak istediğin şeylerin neredeyse hiçbir zaman yok. – Dustin

+0

@Dustin Dosya yeterince küçükse, bunun önemli olmadığını düşünüyorum. Bu noktaya daha fazla vurgu yapmalı mıyım? –

+0

Size katılmıyorum, ancak belki de io.Copy sürümü ilk olmalıdır. Kodunuzun ve mantığınızın her ikisinin de doğru olduğunu düşünüyorum (programınıza kötü bir şey yapabilsem de). Korkarım ki daha çok insanı "her şeyi belleğe çek" şeyini yapıyor göreceğim. – Dustin

İlgili konular