0Pricing
Go Academy · Lekcja

Zapisywanie plików i pliki tymczasowe

WriteFile, flagi OpenFile i pliki tymczasowe

Zapisywanie plików i pliki tymczasowe to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

os.WriteFile

os.WriteFile zapisuje wycinek bajtów do pliku atomowo (najpierw skraca plik, a następnie zapisuje dane). To proste rozwiązanie dla małych plików.

err := os.WriteFile("output.txt", []byte("hello"), 0644)
if err != nil { log.Fatal(err) }

os.Create i defer Close

os.Create tworzy plik lub skraca istniejący i zwraca *os.File. Zawsze należy zamykać plik za pomocą defer.

f, err := os.Create("output.txt")
if err != nil { return err }
defer f.Close()
f.WriteString("hello\n")

os.OpenFile z flagami

os.OpenFile służy do trybów dopisywania, tworzenia tylko wtedy, gdy plik nie istnieje, oraz tworzenia wyłącznego:

f, err := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

bufio.Writer

Plik można opakować w bufio.NewWriter, aby łączyć małe zapisy w większe wywołania systemowe. Przed zamknięciem należy wywołać Flush(), aby zapisać wszystkie dane znajdujące się w buforze.

w := bufio.NewWriter(f)
fmt.Fprintf(w, "line %d\n", i)
w.Flush()

fmt.Fprintf

Sformatowany tekst można zapisywać do dowolnego io.Writer, w tym do plików:

fmt.Fprintf(f, "name: %s, age: %d\n", name, age)

Atomowy wzorzec zapisu pliku

Należy zapisać dane do pliku tymczasowego, a następnie zmienić jego nazwę na nazwę docelową. W systemie POSIX zmiana nazwy jest atomowa — czytelnicy widzą albo stary, albo nowy plik, nigdy częściowo zapisany.

tmp, _ := os.CreateTemp("", "output-*.txt")
tmp.Write(data)
tmp.Close()
os.Rename(tmp.Name(), "output.txt")

os.CreateTemp

os.CreateTemp(dir, pattern) tworzy plik tymczasowy w katalogu dir z unikatową nazwą pasującą do pattern. Zwraca otwarty plik. Za jego usunięcie odpowiada kod wywołujący.

f, err := os.CreateTemp("", "upload-*.json")
defer os.Remove(f.Name()) // cleanup

os.MkdirTemp

os.MkdirTemp tworzy katalog tymczasowy. Należy go używać w przypadku fixture'ów testowych lub potoków przetwarzania, które tworzą wiele plików tymczasowych.

dir, err := os.MkdirTemp("", "batch-*")
defer os.RemoveAll(dir)

Uprawnienia plików

Bity uprawnień systemu Unix, np. 0644 oznaczające rw dla właściciela, r dla grupy i r dla pozostałych, należy przekazywać jako ostatni argument funkcji w stylu Create. Maska umask procesu może dodatkowo ograniczyć te uprawnienia.

Sprawdzanie błędów zapisu

f.WriteString i fmt.Fprintf mogą zwracać błędy, na przykład przy zapełnieniu dysku lub braku uprawnień. Należy sprawdzać błędy albo gromadzić je za pomocą wrappera writera, który zapamiętuje pierwszy błąd.

sync.File nie jest bezpieczny współbieżnie

Wiele goroutines zapisujących jednocześnie do tego samego *os.File może przeplatać zapisy. Należy użyć mutexu albo jednej dedykowanej goroutine zapisującej dane.

Szybkie sprawdzenie

Dlaczego wzorzec zapisu do pliku tymczasowego, a następnie zmiany jego nazwy, uznaje się za atomowy?

Podsumowanie: zapisywanie plików

Najważniejsze informacje:

  • os.WriteFile: proste nadpisywanie; bufio.Writer: łączenie małych zapisów
  • Zapis atomowy: plik tymczasowy + zmiana nazwy
  • os.CreateTemp / os.MkdirTemp do zasobów tymczasowych; zawsze należy odroczyć sprzątanie
  • Należy sprawdzać błędy zapisu i synchronizować zapisy współbieżne

Często zadawane pytania

Czy lekcja „Zapisywanie plików i pliki tymczasowe” jest bezpłatna?

Tak — pełny tekst „Zapisywanie plików i pliki tymczasowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zapisywanie plików i pliki tymczasowe”?

WriteFile, flagi OpenFile i pliki tymczasowe Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Zapisywanie plików i pliki tymczasowe”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Odczytywanie plików za pomocą os i bufio
  2. Zapisywanie plików i pliki tymczasowe
  3. Kodowanie i dekodowanie JSON
  4. Strumieniowe przetwarzanie JSON i CSV
← Powrót do Go Academy