Temporary Files and Directories
#
// ကျွန်ုပ်တို့သည် ပရိုဂရမ်အလုပ်လုပ်နေစဉ်အတွင်းမှာ ပရိုဂရမ်ပြီးဆုံးသွားသောအခါ မလိုအပ်တော့သော
// အချက်အလက်များကို ဖန်တီးလိုသည့်အခါ ရှိတတ်သည်။
// *ယာယီဖိုင်များနှင့် ဒါရိုက်ထရီများ* သည် ဤရည်ရွယ်ချက်အတွက် အသုံးဝင်သည်။
// အဘယ်ကြောင့်ဆိုသော် ၎င်းတို့သည် အချိန်ကြာလာသည်နှင့်အမျှ ဖိုင်စနစ်ကို ညစ်ညမ်းစေခြင်း(pollute) မရှိသောကြောင့်ဖြစ်သည်။
package main
import (
"fmt"
"os"
"path/filepath"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
// ယာယီဖိုင်တစ်ခုဖန်တီးရန် အလွယ်ကူဆုံးနည်းလမ်းမှာ `os.CreateTemp` ကို ခေါ်ခြင်းဖြစ်သည်။
// ၎င်းသည် ဖိုင်ကို ဖန်တီးပြီး *နှင့်* ဖတ်ရန်နှင့်ရေးရန်အတွက် ဖွင့်ပေးသည်။
// ပထမ argument အဖြစ် `""` ကို ပေးထားသောကြောင့် `os.CreateTemp` သည်
// ကျွန်ုပ်တို့၏ OS အတွက် မူလသတ်မှတ်ထားသောနေရာတွင် ဖိုင်ကိုဖန်တီးပေးမည်ဖြစ်သည်။
f, err := os.CreateTemp("", "sample")
check(err)
// ယာယီဖိုင်၏အမည်ကို ပြသသည်။ Unix-based OS များတွင် ဒါရိုက်ထရီသည်
// `/tmp` ဖြစ်နိုင်ချေများသည်။ ဖိုင်အမည်သည် `os.CreateTemp` သို့ ဒုတိယ argument အဖြစ်
// ပေးထားသော prefix ဖြင့် စတင်ပြီး ကျန်အပိုင်းကို တပြိုင်နက်ခေါ်ဆိုမှုများသည်
// အမြဲတမ်း မတူညီသောဖိုင်အမည်များကို ဖန်တီးနိုင်စေရန် အလိုအလျောက်ရွေးချယ်ပေးသည်။
fmt.Println("Temp file name:", f.Name())
// ကျွန်ုပ်တို့အသုံးပြုပြီးသောအခါ ဖိုင်ကိုရှင်းလင်းသည်။ OS သည်
// အချိန်အတန်ကြာပြီးနောက် ယာယီဖိုင်များကို အလိုအလျောက်ရှင်းလင်းဖွယ်ရှိသော်လည်း
// ၎င်းကို တိကျစွာလုပ်ဆောင်ခြင်းသည် ကောင်းမွန်သောအလေ့အထဖြစ်သည်။
defer os.Remove(f.Name())
// ကျွန်ုပ်တို့သည် ဖိုင်ထဲသို့ အချက်အလက်အချို့ရေးနိုင်သည်။
_, err = f.Write([]byte{1, 2, 3, 4})
check(err)
// ယာယီဖိုင်အများအပြားရေးရန် ရည်ရွယ်ပါက ယာယီ *ဒါရိုက်ထရီ* တစ်ခု
// ဖန်တီးရန် ပိုမိုနှစ်သက်နိုင်သည်။
// `os.MkdirTemp` ၏ argument များသည် `CreateTemp` နှင့် တူညီသော်လည်း
// ၎င်းသည် ဖွင့်ထားသောဖိုင်အစား ဒါရိုက်ထရီ *အမည်* ကို ပြန်ပေးသည်။
dname, err := os.MkdirTemp("", "sampledir")
check(err)
fmt.Println("Temp dir name:", dname)
defer os.RemoveAll(dname)
// ယခုကျွန်ုပ်တို့သည် ယာယီဖိုင်အမည်များကို ကျွန်ုပ်တို့၏ယာယီဒါရိုက်ထရီဖြင့်
// ရှေ့ဆက်၍ ဖန်တီးနိုင်သည်။
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