আসুন গো-তে ফাইলগুলি পড়ার এবং লেখার সমস্ত পদ্ধতির একটি Go 1- সামঞ্জস্যপূর্ণ তালিকা তৈরি করুন।
কারণ ফাইল এপিআই সম্প্রতি পরিবর্তিত হয়েছে এবং বেশিরভাগ উত্তর উত্তর গো ১ এর সাথে কাজ করে না They এগুলিও মিস করে bufio
যা গুরুত্বপূর্ণ আইএমএইচও।
নিম্নলিখিত উদাহরণগুলিতে আমি একটি ফাইল এটি থেকে পড়ে এবং গন্তব্য ফাইলটিতে লিখে কপি করি।
বেসিকগুলি দিয়ে শুরু করুন
package main
import (
"io"
"os"
)
func main() {
// open input file
fi, err := os.Open("input.txt")
if err != nil {
panic(err)
}
// close fi on exit and check for its returned error
defer func() {
if err := fi.Close(); err != nil {
panic(err)
}
}()
// open output file
fo, err := os.Create("output.txt")
if err != nil {
panic(err)
}
// close fo on exit and check for its returned error
defer func() {
if err := fo.Close(); err != nil {
panic(err)
}
}()
// make a buffer to keep chunks that are read
buf := make([]byte, 1024)
for {
// read a chunk
n, err := fi.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if n == 0 {
break
}
// write a chunk
if _, err := fo.Write(buf[:n]); err != nil {
panic(err)
}
}
}
এখানে আমি ব্যবহার করেছি os.Open
এবং os.Create
যা চারপাশে সুবিধাজনক মোড়ক os.OpenFile
। আমাদের সাধারণত OpenFile
সরাসরি কল করার প্রয়োজন হয় না ।
ইওএফের চিকিত্সা করার বিষয়টি লক্ষ্য করুন। প্রতিটি কল Read
পূরণ করার চেষ্টা করে buf
এবং ততক্ষণে io.EOF
এটি ফাইলের শেষে পৌঁছলে ত্রুটি হিসাবে ফিরে আসে । এই ক্ষেত্রে buf
এখনও তথ্য রাখা হবে। ফলস্বরূপ কলগুলি Read
শূন্যকে রিটার্নে পাঠানো বাইটের সংখ্যা io.EOF
হিসাবে এবং ত্রুটি হিসাবে একই হিসাবে আসে। অন্য কোনও ত্রুটি আতঙ্কের দিকে নিয়ে যাবে।
ব্যবহার bufio
package main
import (
"bufio"
"io"
"os"
)
func main() {
// open input file
fi, err := os.Open("input.txt")
if err != nil {
panic(err)
}
// close fi on exit and check for its returned error
defer func() {
if err := fi.Close(); err != nil {
panic(err)
}
}()
// make a read buffer
r := bufio.NewReader(fi)
// open output file
fo, err := os.Create("output.txt")
if err != nil {
panic(err)
}
// close fo on exit and check for its returned error
defer func() {
if err := fo.Close(); err != nil {
panic(err)
}
}()
// make a write buffer
w := bufio.NewWriter(fo)
// make a buffer to keep chunks that are read
buf := make([]byte, 1024)
for {
// read a chunk
n, err := r.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if n == 0 {
break
}
// write a chunk
if _, err := w.Write(buf[:n]); err != nil {
panic(err)
}
}
if err = w.Flush(); err != nil {
panic(err)
}
}
bufio
এখানে কেবল বাফার হিসাবে কাজ করছে, কারণ আমাদের ডেটা নিয়ে তেমন কিছু করার নেই। অন্যান্য পরিস্থিতিতে (বিশেষত পাঠ্য ফাইল সহ) bufio
আমাদের সহজেই এবং নমনীয়ভাবে পড়ার জন্য এবং লেখার জন্য একটি দুর্দান্ত এপিআই দিয়ে খুব দরকারী , যখন এটি পর্দার আড়ালে বাফারিং পরিচালনা করে।
ব্যবহার ioutil
package main
import (
"io/ioutil"
)
func main() {
// read the whole file at once
b, err := ioutil.ReadFile("input.txt")
if err != nil {
panic(err)
}
// write the whole body at once
err = ioutil.WriteFile("output.txt", b, 0644)
if err != nil {
panic(err)
}
}
পাই হিসাবে সহজ! তবে আপনি কেবলমাত্র বড় ফাইলের সাথেই কাজ করছেন না তা নিশ্চিত হয়েই এটি ব্যবহার করুন।