मैं एक स्थानीय फ़ाइल खोलना चाहता हूँ, और एक लौटाता हूँ 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 मोड है। यदि कोई त्रुटि है, तो यह टाइप * PathError होगी।
प्रकार का लौटाया गया मान इंटरफ़ेस को *os.Fileलागू करता io.Readerहै।
प्रकार * os.File io.Reader इंटरफ़ेस को लागू करता है, इसलिए आप फ़ाइल को रीडर के रूप में वापस कर सकते हैं। लेकिन मैं आपको bufio पैकेज का उपयोग करने की सलाह देता हूं यदि आपके पास बड़ी फ़ाइलों को पढ़ने का इरादा है, तो कुछ इस तरह से:
file, err := os.Open("path/file.ext")
// if err != nil { ... }
return bufio.NewReader(file)
bufioबड़ी फ़ाइलों के लिए अनुशंसा क्यों करते हैं ?
path/file.ext। कोई और जवाब नहीं दिया कि क्या os.Fileथा।