Czy istnieje sposób na pobranie dużego pliku za pomocą Go, który zapisze zawartość bezpośrednio do pliku, zamiast przechowywać wszystko w pamięci przed zapisaniem jej do pliku? Ponieważ plik jest tak duży, przechowywanie go w pamięci przed zapisaniem do pliku spowoduje zajęcie całej pamięci.
106
io.Copy
odczytuje 32kb (maksymalnie) z wejścia i zapisuje je na wyjściu, a następnie powtarza. Więc nie martw się o pamięć.client := http.Client{Timeout: 10 * time.Second,} client.Get("http://example.com/")
Bardziej opisowa wersja odpowiedzi Steve M.
źródło
Odpowiedź wybrana powyżej przy użyciu
io.Copy
jest dokładnie tym, czego potrzebujesz, ale jeśli interesują Cię dodatkowe funkcje, takie jak wznawianie zepsutych pobrań, automatyczne nadawanie nazw plikom, sprawdzanie sum kontrolnych lub monitorowanie postępu wielu pobrań, pobierz pakiet pobierania .źródło
Oto próbka. https://github.com/thbar/golang-playground/blob/master/download-files.go
Daję ci również kilka kodów, które mogą ci pomóc.
kod:
źródło
ioutil.ReadAll()
. W porządku, o ile masz do czynienia z małymi plikami.