আমি একটি স্থানীয় ফাইল খুলতে এবং একটি ফিরে চাই io.Reader
। কারণটি হ'ল আমি যে io.Reader
লাইব্রেরিটি ব্যবহার করছি তার জন্য আমাকে একটি খাওয়ানো দরকার , যেমন:
func read(r io.Reader) (results []string) {
}
আমি একটি স্থানীয় ফাইল খুলতে এবং একটি ফিরে চাই io.Reader
। কারণটি হ'ল আমি যে io.Reader
লাইব্রেরিটি ব্যবহার করছি তার জন্য আমাকে একটি খাওয়ানো দরকার , যেমন:
func read(r io.Reader) (results []string) {
}
উত্তর:
os.Open
ফেরত একটি io.Reader
http://play.golang.org/p/BskGT09kxL
package main
import (
"fmt"
"io"
"os"
)
var _ io.Reader = (*os.File)(nil)
func main() {
fmt.Println("Hello, playground")
}
nil
নির্দেশ করতে সঠিক টাইপের একটি পয়েন্টার os.File
। (এই ক্ষেত্রে, আপনি এর মাধ্যমে সত্যই কিছু করতে পারবেন না)) এবং var _ io.Reader = (*os.File)(nil)
অ্যাসাইনমেন্টটি সংকলকটি পরীক্ষা করে তোলে যে *os.File
এটি একটি io.Reader
(বা অন্যথায় অ্যাসাইনমেন্টটি বৈধ হবে না)। আপনি যদি খেলার মাঠে যান এবং পরিবর্তিত *os.File
হন তবে *os.Process
আপনি ইন্টারফেসটি সন্তুষ্ট না করে এমন জিনিসগুলির জন্য উত্পন্ন ত্রুটিটি দেখতে পাবেন।
func (f *File) Read(b []byte) (n int, err error)
, একই হিসাবে Reader
।
Os.Open () ব্যবহার করুন :
func ওপেন (নামের স্ট্রিং) (ফাইল * ফাইল, ভুল ত্রুটি)
ওপেন পড়ার জন্য নামকৃত ফাইলটি খুলবে। যদি সফল হয় তবে ফিরে আসা ফাইলের পদ্ধতিগুলি পড়ার জন্য ব্যবহার করা যেতে পারে; সম্পর্কিত ফাইল বর্ণনাকারীর মোড O_RDONLY রয়েছে। যদি কোনও ত্রুটি হয় তবে এটি * পাঠেররর টাইপ হবে।
প্রকারের প্রত্যাবর্তিত মান ইন্টারফেস *os.File
প্রয়োগ করে io.Reader
।
টাইপ * ওএস.ফায়াল আইও.আরেডার ইন্টারফেস প্রয়োগ করে, তাই আপনি ফাইলটি পাঠক হিসাবে ফিরিয়ে দিতে পারেন। তবে আমি আপনাকে সুপারিশ করছি বুফিও প্যাকেজটি ব্যবহার করার জন্য যদি আপনার বড় ফাইলগুলি পড়ার উদ্দেশ্য থাকে তবে এরকম কিছু:
file, err := os.Open("path/file.ext")
// if err != nil { ... }
return bufio.NewReader(file)
bufio
বড় ফাইলগুলির জন্য কেন সুপারিশ করবেন তা দয়া করে বিস্তারিত বলতে পারেন ?
path/file.ext
। অন্য কোন উত্তর নেই যা os.File
ছিল তা বানান ।