Writing and Appending to Files
Fayllarga yozish va qo'shish
os.WriteFile qulay, lekin u har doim faylni butunlay qayta yozadi — agar fayl allaqachon mavjud bo'lsa, uning eski mazmuni yo'qoladi. Log fayl kabi, vaqt o'tishi bilan qo'shib boriladigan fayllar uchun boshqa yondashuv kerak: os.OpenFile maxsus bayroqlar bilan.
f, err := os.OpenFile("/tmp/log.txt", os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
// xatoni boshqarish
}
defer f.Close()
f.WriteString("yangi qator\n")os.O_APPEND — yozishni fayl oxiriga qo'shishni bildiradi (mavjud mazmunni o'chirmaydi), os.O_WRONLY — faylni faqat yozish uchun ochishni bildiradi. Bu ikkita bayroq | (bitwise OR) bilan birlashtiriladi — Interfaces & Polymorphism kursidagi interfeys kompozitsiyasiga o'xshab, bu yerda ham kichik "imkoniyat" birliklarini birlashtirib, kattaroq xatti-harakat hosil qilinadi.
>_ Exercise
os.WriteFile bilan /tmp/log.txt fayliga "birinchi qator\n" yozing. So'ngra os.OpenFile bilan os.O_APPEND|os.O_WRONLY bayroqlari bilan oching va "ikkinchi qator\n"ni WriteString bilan qo'shing. Oxirida os.ReadFile bilan butun faylni o'qib, uning mazmunini chop eting.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
os.WriteFile faylni butunlay qayta yozadi; os.OpenFile bilan os.O_APPEND bayrog'idan foydalanish esa mavjud mazmunga qo'shib yozish imkonini beradi. Bayroqlarni | bilan birlashtirish — kerakli xatti-harakatni aniq belgilashning Go'ga xos usuli.
NEXT UP
JSON Marshaling and Unmarshaling
$ go run main.go
Kodingizni ishga tushiring