4.7.1 مقدمه #
توسعه دهندگان Go میتوانند از پکیجهای built-in مانند “os” و “io” برای کار با فایلها استفاده کنند. همچنین، پکیجهای دیگری نیز برای کار با فایل وجود دارند که میتوان به عنوان پکیج استاندارد نامید. نمونه ای از این پکیجها، پکیج “bufio” است که برای کار با بفرهای ورودی/خروجی استفاده شده و به توسعه دهندگان اجازه میدهد تا برنامههایی با عملکرد بهتر و با کارایی بالاتر ایجاد کنند.
4.7.2 باز کردن فایل و خواندن محتوای فایل با پکیج os #
برای باز کردن یک فایل متنی و خواندن محتوای آن، میتوانیم از پکیج “os” و تابع “Open” استفاده کنیم. در کد زیر، ما یک فایل به نام “example.txt” باز میکنیم و محتوای آن را بر اساس خط به خط خوانده و به صفحه کنسول چاپ میکنیم:
1package main
2
3import (
4 "bufio"
5 "fmt"
6 "log"
7 "os"
8)
9
10func main() {
11 // باز کردن فایل برای خواندن
12 file, err := os.Open("example.txt")
13 if err != nil {
14 log.Fatal(err)
15 }
16 defer file.Close()
17
18 // خواندن خط به خط از فایل
19 scanner := bufio.NewScanner(file)
20 for scanner.Scan() {
21 fmt.Println(scanner.Text())
22 }
23
24 if err := scanner.Err(); err != nil {
25 log.Fatal(err)
26 }
27}
در کد بالا، با استفاده از تابع “os.Open”، فایل “example.txt” برای خواندن به صورت فایل شیء باز میشود. سپس، با استفاده از تابع “bufio.NewScanner” محتوای فایل به شیء “scanner” انتقال داده میشود و در نهایت با استفاده از حلقه، محتوای فایل خوانده شده بر اساس خط به خط و به صورت متنی چاپ میشود.
در نهایت، با استفاده از “scanner.Err”، خطاهایی که در پروسه خواندن ممکن است بوجود آیند، بررسی شده و مورد احتیاط قرار میگیرند.
4.7.3 نحوه ایجاد فایل و نوشتن محتوا داخل فایل با os #
برای ایجاد یک فایل جدید و نوشتن محتوای دلخواه در آن، میتوانیم از پکیج “os” و توابع آن استفاده کنیم. در کد زیر، یک فایل با نام “example.txt” ساخته شده و پس از باز شدن، متن “Hello, World!” در داخل آن نوشته میشود:
1package main
2
3import (
4 "fmt"
5 "os"
6)
7
8func main() {
9 // ساخت فایل با نام example.txt
10 file, err := os.Create("example.txt")
11 if err != nil {
12 fmt.Println(err)
13 return
14 }
15 defer file.Close()
16
17 // نوشتن محتوا در فایل
18 fmt.Fprintln(file, "Hello, World!")
19}
در کد بالا، با استفاده از تابع “os.Create”، یک فایل با نام “example.txt” ایجاد شده و به عنوان یک فایل شیء باز شده است. سپس با استفاده از تابع “fmt.Fprintln”، متن “Hello, World!” در داخل فایل نوشته میشود.
در نهایت، با استفاده از “file.Close”، فایل بسته شده و تمام تغییرات آن ذخیره میشود.
4.7.4 خواندن و نوشتن فایل با استفاده از پکیج io #
برای خواندن و نوشتن فایلها میتوان از پکیج “io” استفاده کرد. این پکیج امکانات بسیاری را برای کار با بیتها و دادههای ورودی/خروجی فراهم میکند. در کد زیر، یک فایل با نام “example.txt” باز شده و محتوای آن به صورت خوانده و به فایل دیگری با نام “output.txt” کپی میشود:
1package main
2
3import (
4 "io"
5 "log"
6 "os"
7)
8
9func main() {
10 // باز کردن فایل برای خواندن
11 inputFile, err := os.Open("example.txt")
12 if err != nil {
13 log.Fatal(err)
14 }
15 defer inputFile.Close()
16
17 // باز کردن فایل برای نوشتن
18 outputFile, err := os.Create("output.txt")
19 if err != nil {
20 log.Fatal(err)
21 }
22 defer outputFile.Close()
23
24 // کپی کردن اطلاعات از فایل ورودی به فایل خروجی
25 _, err = io.Copy(outputFile, inputFile)
26 if err != nil {
27 log.Fatal(err)
28 }
29}
در کد بالا، با استفاده از توابع “os.Open” و “os.Create”، فایلهای ورودی و خروجی باز شده و به عنوان فایل شیء به برنامه اضافه شدهاند. سپس با استفاده از تابع “io.Copy”، اطلاعات از فایل ورودی، به فایل خروجی کپی شدهاند.
در نهایت، با استفاده از “defer” و “Close”، فایلها بسته شدهاند و تغییرات آنها ذخیره شدهاند.