जवाबों:
उपयोग करें ioutil.ReadFile
:
func ReadFile(filename string) ([]byte, error)
ReadFile फ़ाइल नाम से फ़ाइल पढ़ता है और सामग्री देता है। एक सफल कॉल गलत == नहीं है, गलत नहीं है == EOF। क्योंकि ReadFile पूरी फ़ाइल को पढ़ता है, यह रिपोर्ट से प्राप्त त्रुटि के रूप में EOF को रीड से नहीं मानता है।
[]byte
इसके बदले आपको मिलेगा string
। यदि वास्तव में आवश्यक हो तो इसे परिवर्तित किया जा सकता है:
s := string(buf)
यदि आप केवल सामग्री चाहते हैं string
, तो पैकेज ReadFile
से फ़ंक्शन का उपयोग करना सरल उपाय है io/ioutil
। यह फ़ंक्शन एक टुकड़ा देता है, bytes
जिसे आप आसानी से एक में बदल सकते हैं string
।
package main
import (
"fmt"
"io/ioutil"
)
func main() {
b, err := ioutil.ReadFile("file.txt") // just pass the file name
if err != nil {
fmt.Print(err)
}
fmt.Println(b) // print the content as 'bytes'
str := string(b) // convert content to a 'string'
fmt.Println(str) // print the content as a 'string'
}
मुझे लगता है कि सबसे अच्छी बात है, अगर आप वास्तव में इन सभी फ़ाइलों को संक्षिप्त करने की दक्षता के बारे में चिंतित हैं, तो उन सभी को एक ही बाइट्स बफर में कॉपी करना है।
buf := bytes.NewBuffer(nil)
for _, filename := range filenames {
f, _ := os.Open(filename) // Error handling elided for brevity.
io.Copy(buf, f) // Error handling elided for brevity.
f.Close()
}
s := string(buf.Bytes())
यह प्रत्येक फ़ाइल को खोलता है, इसकी सामग्री को buf में कॉपी करता है, फिर फ़ाइल को बंद कर देता है। आपकी स्थिति के आधार पर आपको वास्तव में इसे बदलने की आवश्यकता नहीं हो सकती है, अंतिम पंक्ति यह दिखाने के लिए है कि buf.Bytes () में आपके द्वारा खोजा जा रहा डेटा है।
मैं कंप्यूटर के साथ नहीं हूं, इसलिए मैं एक मसौदा लिखता हूं। आप स्पष्ट हो सकते हैं कि मैं क्या कहता हूं।
func main(){
const dir = "/etc/"
filesInfo, e := ioutil.ReadDir(dir)
var fileNames = make([]string, 0, 10)
for i,v:=range filesInfo{
if !v.IsDir() {
fileNames = append(fileNames, v.Name())
}
}
var fileNumber = len(fileNames)
var contents = make([]string, fileNumber, 10)
wg := sync.WaitGroup{}
wg.Add(fileNumber)
for i,_:=range content {
go func(i int){
defer wg.Done()
buf,e := ioutil.Readfile(fmt.Printf("%s/%s", dir, fileName[i]))
defer file.Close()
content[i] = string(buf)
}(i)
}
wg.Wait()
}