Mam dużo małych plików, nie chcę ich czytać linijka po linijce.
Czy w Go jest funkcja, która wczyta cały plik do zmiennej łańcuchowej?
Zastosowanie ioutil.ReadFile
:
func ReadFile(filename string) ([]byte, error)
ReadFile czyta plik o nazwie nazwa_pliku i zwraca zawartość. Pomyślne wywołanie zwraca err == nil, a nie err == EOF. Ponieważ ReadFile odczytuje cały plik, nie traktuje EOF z Read jako błędu do zgłoszenia.
Otrzymasz []byte
zamiast string
. To może być przekształcony czy naprawdę konieczne:
s := string(buf)
Jeśli chcesz, aby zawartość była po prostu jako
string
, prostym rozwiązaniem jest użycieReadFile
funkcji zio/ioutil
pakietu. Ta funkcja zwraca wycinek,bytes
który można łatwo przekonwertować na plikstring
.źródło
Myślę, że najlepszą rzeczą do zrobienia, jeśli naprawdę martwisz się o skuteczność łączenia wszystkich tych plików, jest skopiowanie ich wszystkich do tego samego bufora bajtów.
To otwiera każdy plik, kopiuje jego zawartość do bufora, a następnie zamyka plik. W zależności od sytuacji, w rzeczywistości konwersja może nie być konieczna, ostatnia linia służy po prostu do pokazania, że buf.Bytes () zawiera dane, których szukasz.
źródło
Oto jak to zrobiłem:
źródło
Nie mam komputera, więc piszę szkic. Możesz być pewien, co mówię.
źródło