Fayllar bilan ishlash
Fayllar bilan ishlash har qanday tizim dasturining muhim qismidir. Go da bu jarayon juda oson va xavfsiz tarzda amalga oshiriladi.
Go fayllar bilan ishlash uchun asosan quyidagi paketlardan foydalanadi:
os:
Fayl yaratish, o'qish, yozish, o'chirish, ruxsatlar, stat kabi asosiy amallar uchun.io:
O'qish va yozishni standart interfeyslar orqali boshqarish uchun.bufio:
Qatorma-qator o'qish yoki buferli yozish uchun.io/ioutil:
(eskirgan) Yengil o'qish/yozish uchun. O'rniga os.ReadFile, os.WriteFile ishlatiladi
Fayl yaratish va yozish (os.WriteFile)
Natija:
fayl.txt fayl hosil bo'ladi.
Bu yerda:
- content โ []byte (baytlardan iborat slice) tipidagi o'zgaruvchi.
- "Bu Go tilida yozilgan fayl.\n" โ matn, uni faylga yozadi.
- []byte(...) โ bu matnni baytlarga (kompyuter tushunadigan formatga) aylantiradi.
- 0644 โ ruxsat kodi: egasi yozadi/o'qiydi, boshqalar faqat o'qiydi.
Nega []byte ishlatilgan?
Go tilida faylga yozish funksiyalari (masalan, os.WriteFile) baytlar ketma-ketligi ([]byte) bilan ishlaydi, chunki fayllar baytlar orqali saqlanadi. Kompyuterlar matnni ham, rasmni ham, kodni ham bayt ko'rinishida saqlaydi. Shuning uchun matnni yozishdan oldin uni []bytega aylantirish kerak bo'ladi, stringni to'g'ridan-to'g'ri berib bo'lmaydi, uni baytlarga aylantirish zarur.
Fayldan o'qish
Natija:
Faylga qo'shimcha yozish (os.OpenFile + os.O_APPEND)
os.O_APPEND
Faylga yozish oxiridan qo'shiladi (append rejimi). Fayl mavjud bo'lsa, yozuv oxiriga qo'shiladi, mavjud bo'lmasa yaratmaydi (faqat O_CREATE bo'lsa yaratadi).os.O_WRONLY
Faylga faqat yozish rejimida ochiladi (o'qib bo'lmaydi).|
bu yerda bitwise OR bo'lib, ikkita flagni birlashtiradi.
Faylni qatorma-qator o'qish (bufio.Scanner)
Faylni o'qib kerakli ishlar amalga oshirilganidan so'ng uni yopishni unutmaslik zarur, agar yopilmasdan qolib ketsa
ortiqcha resurs sarflanadi. Har bir ochiq fayl xotiradan joy oladi. Yopilmasa xotira sekin-asta oshib boradi. Yuqoridagi
misolda yopish defer file.Close()
bilan amalga oshirilgan. Ya'ni funksiya ishini yakunlagan zaxoti faylni file.Close()
funksiyasini chaqirib yopadi.
Faylni o'chirish (os.Remove)
Fayl mavjudligini tekshirish
Fayl haqida ma'lumot olish (os.FileInfo)
info.IsDir()
Fayl papkami yoki oddiy faylmi, shuni tekshiradi.info.Name()
Faqat fayl nomini qaytaradi, joylashgan joyini emas.info.Mode()
Faylning ruxsatlari va turini (os.FileMode) qaytaradi.info.ModTime()
Faylning oxirgi o'zgartirilgan vaqtini (time.Time) qaytaradi.info.Sys()
Tizimdan kelgan qo'shimcha metadata (interface{}) qaytaradi.info.Size()
Fayl hajmini baytlarda (int64) qaytaradi.
JSON
Go da JSON fayl bilan ishlash juda oddiy, chunki encoding/json
paketida hamma kerakli funksiyalar mavjud.
fayl.json
Bu yerda tushunishimiz kerak bo'ladigan muhim narsalardan bir bu struct tag. Go da struct tag sintaksisi
struct maydonlariga qo'shimcha metadata biriktirish usuli. Struct tag `json:"name"` ko'rinishida yoziladi.
encoding/json
paketi bu taglarni o'qib, JSON bilan struct maydonlarini qanday moslashtirish kerakligini biladi.
Agar tag yozilmasa:
struct:
fayl.json:
Agar tag bo'lmasa maydon nomi case-insensitive
tekshiriladi. "name" JSON maydoni Name struct maydoniga tushadi
(harf registriga qaramaydi). Shuning uchun "name", "NAME", "Name" hammasi Name deb o'qiladi.