|
در طول اجرای برنامه، اغلب میخواهیم دادههایی بسازیم که
پس از خروج برنامه دیگر به آنها نیازی نیست.
فایلها و پوشههای موقت برای این منظور مفیدند، چون
به مرور زمان سیستم فایل را شلوغ نمیکنند.
|
|
|
|

package main
|
|
|
import (
"fmt"
"os"
"path/filepath"
)
|
|
|
func check(e error) {
if e != nil {
panic(e)
}
}
|
|
|
func main() {
|
|
سادهترین راه برای ساختن فایل موقت، صدا زدن
os.CreateTemp است. این تابع یک فایل میسازد و آن
را برای خواندن و نوشتن باز میکند. "" را بهعنوان
آرگومان اول میدهیم، پس os.CreateTemp فایل را در
مکان پیشفرض سیستمعامل ما میسازد.
|
f, err := os.CreateTemp("", "sample")
check(err)
|
|
نام فایل موقت را نمایش میدهیم. در سیستمعاملهای
مبتنی بر یونیکس، پوشه احتمالاً /tmp خواهد بود. نام
فایل با پیشوندی که بهعنوان آرگومان دوم به
os.CreateTemp داده شده شروع میشود و بقیهاش خودکار
انتخاب میشود تا فراخوانیهای همزمان همیشه نامهای
متفاوتی بسازند.
|
fmt.Println("Temp file name:", f.Name())
|
|
پس از پایان کار فایل را پاک میکنیم. سیستمعامل
احتمالاً پس از مدتی خودش فایلهای موقت را پاک میکند،
اما بهتر است این کار را صریحاً انجام دهیم.
|
defer os.Remove(f.Name())
|
|
میتوانیم مقداری داده در فایل بنویسیم.
|
_, err = f.Write([]byte{1, 2, 3, 4})
check(err)
|
|
اگر قصد داریم فایلهای موقت زیادی بنویسیم، شاید بهتر
باشد یک پوشهٔ موقت بسازیم. آرگومانهای
os.MkdirTemp مثل 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)
}
|