Go-তে File I/O Operations (os, ioutil প্যাকেজ)
Go প্রোগ্রামিং ভাষায় ফাইল ইনপুট/আউটপুট (File I/O) অপারেশনগুলি খুবই গুরুত্বপূর্ণ। Go তে os এবং ioutil প্যাকেজ ব্যবহার করে ফাইলের সাথে কাজ করা হয়। তবে, Go 1.16 থেকে ioutil প্যাকেজটি বাদ দেওয়া হয়েছে এবং এর কাজ os এবং io/ioutil প্যাকেজের মধ্যে বিতরণ করা হয়েছে।
নতুন ভার্সনে, ioutil এর সমস্ত ফাংশনগুলি os, io, এবং os/exec প্যাকেজে সরানো হয়েছে, তবে পুরোনো ভার্সনে ioutil ব্যবহৃত হত।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে os প্যাকেজ এবং ioutil প্যাকেজের সাহায্যে ফাইলের সাথে কাজ করতে হয়।
১. os প্যাকেজ দিয়ে ফাইল I/O অপারেশন
Go তে ফাইলের সাথে কাজ করার জন্য os প্যাকেজটি প্রধান প্যাকেজ। এটি ফাইল তৈরি, ওপেন, রিড, রাইট, এবং ফাইলের প্রপার্টি নিয়ে কাজ করতে সহায়তা করে।
১.১ ফাইল তৈরি ও লেখা
Go তে একটি নতুন ফাইল তৈরি এবং তাতে ডেটা লেখা খুবই সহজ। os.Create ফাংশন দিয়ে ফাইল তৈরি করা হয় এবং Write ফাংশন দিয়ে তাতে লেখা হয়।
package main
import (
"fmt"
"os"
)
func main() {
// ফাইল তৈরি করা
file, err := os.Create("example.txt")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
// ফাইলে লেখা
_, err = file.WriteString("Hello, this is a sample file.")
if err != nil {
fmt.Println("Error writing to file:", err)
return
}
fmt.Println("File created and data written successfully!")
}এখানে, আমরা os.Create ব্যবহার করে একটি নতুন ফাইল example.txt তৈরি করেছি এবং WriteString ফাংশন দিয়ে তাতে লেখা হয়েছে।
আউটপুট:
File created and data written successfully!১.২ ফাইল পড়া (Reading a File)
os.Open ফাংশন দিয়ে ফাইল খুলে Read ফাংশন দিয়ে তা পড়া হয়। আপনি ফাইলের কনটেন্টস একটি বাইট স্লাইস (byte slice) এ রাখতে পারেন।
package main
import (
"fmt"
"os"
)
func main() {
// ফাইল ওপেন করা
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// ফাইল থেকে ডেটা পড়া
data := make([]byte, 100) // 100 বাইটের স্লাইস তৈরি
n, err := file.Read(data)
if err != nil {
fmt.Println("Error reading file:", err)
return
}
fmt.Println("Read", n, "bytes from file")
fmt.Println(string(data[:n])) // প্রাপ্ত ডেটা প্রিন্ট করা
}এখানে, os.Open ফাংশন দিয়ে ফাইলটি ওপেন করেছি এবং file.Read দিয়ে ফাইল থেকে ডেটা পড়েছি। প্রাপ্ত ডেটা একটি বাইট স্লাইসে রাখা হয় এবং তারপরে তা প্রিন্ট করা হয়।
আউটপুট:
Read 32 bytes from file
Hello, this is a sample file.১.৩ ফাইল অ্যাপেন্ড করা (Appending Data to a File)
যদি আপনি একটি ফাইলের শেষে নতুন ডেটা অ্যাপেন্ড করতে চান, তবে os.OpenFile ব্যবহার করতে হবে। এর মাধ্যমে আপনি ফাইলটি অ্যাপেন্ড মোডে ওপেন করতে পারবেন।
package main
import (
"fmt"
"os"
)
func main() {
// ফাইল ওপেন করা (অ্যাপেন্ড মোডে)
file, err := os.OpenFile("example.txt", os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// ফাইলে অ্যাপেন্ড করা
_, err = file.WriteString("\nAppending new data to the file.")
if err != nil {
fmt.Println("Error appending to file:", err)
return
}
fmt.Println("Data appended to file successfully!")
}এখানে, os.OpenFile ফাংশন ব্যবহার করে আমরা ফাইলটি অ্যাপেন্ড মোডে ওপেন করেছি এবং নতুন ডেটা WriteString এর মাধ্যমে ফাইলের শেষে অ্যাপেন্ড করেছি।
আউটপুট:
Data appended to file successfully!২. ioutil প্যাকেজ দিয়ে ফাইল I/O অপারেশন (Go 1.15 এর আগে)
ioutil প্যাকেজটি Go 1.16 এর আগে ফাইল I/O অপারেশন সহজ করার জন্য ব্যবহৃত হয়, যেমন ফাইল পড়া, লেখার কাজ।
২.১ ফাইল পড়া
Go 1.15 বা তার আগে, ioutil.ReadFile ফাংশন ব্যবহার করে ফাইলের কনটেন্ট সরাসরি পড়ে নেয়া যেতে পারে।
package main
import (
"fmt"
"io/ioutil"
)
func main() {
// ফাইল পড়া
data, err := ioutil.ReadFile("example.txt")
if err != nil {
fmt.Println("Error reading file:", err)
return
}
fmt.Println(string(data)) // ফাইলের ডেটা প্রিন্ট করা
}এখানে, ioutil.ReadFile ফাংশন দিয়ে আমরা ফাইলটি পড়েছি এবং তার কনটেন্ট data স্লাইসে ধারণ করেছি। তারপর তা প্রিন্ট করা হয়েছে।
আউটপুট:
Hello, this is a sample file.২.২ ফাইল লেখা
ioutil.WriteFile ব্যবহার করে ফাইলের মধ্যে ডেটা লিখা যায়। এই ফাংশনটি ফাইলটি তৈরি করে যদি না থাকে এবং লিখে।
package main
import (
"fmt"
"io/ioutil"
)
func main() {
// ফাইল লেখা
data := []byte("This is the new content written to the file.")
err := ioutil.WriteFile("newfile.txt", data, 0644)
if err != nil {
fmt.Println("Error writing to file:", err)
return
}
fmt.Println("File written successfully!")
}এখানে, ioutil.WriteFile দিয়ে নতুন ফাইল newfile.txt তে ডেটা লেখা হয়েছে।
আউটপুট:
File written successfully!৩. Go 1.16 এর পর ioutil এর পরিবর্তন
Go 1.16 এর পর ioutil প্যাকেজটি বাদ দেওয়া হয়েছে এবং তার কার্যকারিতা নতুন প্যাকেজে স্থানান্তরিত করা হয়েছে:
ioutil.ReadFileপরিবর্তেos.ReadFileব্যবহার করতে হবে।ioutil.WriteFileপরিবর্তেos.WriteFileব্যবহার করতে হবে।ioutil.ReadAllপরিবর্তেio.ReadAllব্যবহার করতে হবে।
৩.১ New Method with os and io
package main
import (
"fmt"
"os"
"io"
)
func main() {
// os.ReadFile ব্যবহার করে ফাইল পড়া
data, err := os.ReadFile("example.txt")
if err != nil {
fmt.Println("Error reading file:", err)
return
}
fmt.Println(string(data))
// os.WriteFile ব্যবহার করে ফাইল লেখা
err = os.WriteFile("newfile.txt", []byte("New content after Go 1.16"), 0644)
if err != nil {
fmt.Println("Error writing to file:", err)
return
}
fmt.Println("New content written to file successfully!")
}সারসংক্ষেপ
- os প্যাকেজ: ফাইল তৈরি, ওপেন, রিড, রাইট, এবং প্রপার্টি নিয়ে কাজ করার জন্য ব্যবহৃত হয়।
os.Create,os.Open,os.WriteFile,os.ReadFileইত্যাদি ফাংশন দ্বারা ফাইলের সাথে কাজ করা যায়। - ioutil প্যাকেজ (Go 1.15 এবং পূর্বে):
ioutil.ReadFile,ioutil.WriteFileইত্যাদি ফাংশন দিয়ে ফাইল পড়া ও লেখা করা যায়। - Go 1.16 এর পর:
ioutilপ্যাকেজটি পরিবর্তিত হয়েছে এবং তার কার্যকারিতাosএবংioপ্যাকেজে স্থানান্তরিত হয়েছে।
ফাইল
I/O অপারেশন ব্যবহার করে, আপনি আপনার Go প্রোগ্রামে ফাইলের সাথে ডেটা সংরক্ষণ, রিড, এবং ম্যানিপুলেশন করতে সক্ষম হবেন।
Read more