Go by Example: Temporary Files and Directories

Dastur bajarilishi davomida biz ko’pincha dastur chiqib ketgandan keyin kerak bo’lmaydigan ma’lumotlarni yaratishni xohlaymiz. Vaqtinchalik fayllar va kataloglar shu maqsadda foydalidir, chunki ular vaqt o’tishi bilan fayl tizimini ifloslantirmaydi.

package main
import (
    "fmt"
    "os"
    "path/filepath"
)
func check(e error) {
    if e != nil {
        panic(e)
    }
}
func main() {

Vaqtinchalik fayl yaratishning eng oson yo’li os.CreateTemp ni chaqirishdir. U fayl yaratadi va uni o’qish va yozish uchun ochadi. Biz birinchi argument sifatida "" beramiz, shuning uchun os.CreateTemp faylni OS’imiz uchun sukut bo’yicha joyda yaratadi.

    f, err := os.CreateTemp("", "sample")
    check(err)

Vaqtinchalik faylning nomini ko’rsating. Unix asosidagi OS’larda katalog ehtimol /tmp bo’ladi. Fayl nomi os.CreateTemp ga ikkinchi argument sifatida berilgan prefiks bilan boshlanadi, qolgan qismi esa bir vaqtning o’zidagi chaqiruvlar har doim turli xil fayl nomlarini yaratishini ta’minlash uchun avtomatik tanlanadi.

    fmt.Println("Temp file name:", f.Name())

Ishimiz tugagandan keyin faylni tozalang. OS ehtimol bir muncha vaqtdan keyin vaqtinchalik fayllarni o’zi tozalaydi, lekin buni oshkora bajarish yaxshi amaliyotdir.

    defer os.Remove(f.Name())

Biz faylga bir oz ma’lumot yozishimiz mumkin.

    _, err = f.Write([]byte{1, 2, 3, 4})
    check(err)

Agar biz ko’plab vaqtinchalik fayllar yozmoqchi bo’lsak, vaqtinchalik katalog yaratishni afzal ko’rishimiz mumkin. os.MkdirTemp ning argumentlari CreateTemp ningidek, lekin u ochiq fayl o’rniga katalog nomini qaytaradi.

    dname, err := os.MkdirTemp("", "sampledir")
    check(err)
    fmt.Println("Temp dir name:", dname)
    defer os.RemoveAll(dname)

Endi biz vaqtinchalik fayl nomlarini ularning oldiga vaqtinchalik katalogimizni qo’shib hosil qilishimiz mumkin.

    fname := filepath.Join(dname, "file1")
    err = os.WriteFile(fname, []byte{1, 2}, 0666)
    check(err)
}
$ go run temporary-files-and-directories.go
Temp file name: /tmp/sample610887201
Temp dir name: /tmp/sampledir898854668

Keyingi misol: .