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”، فایلها بسته شدهاند و تغییرات آنها ذخیره شدهاند.