Yanıtlar:
Kullanım ioutil.ReadFile
:
func ReadFile(filename string) ([]byte, error)
ReadFile, dosyaadı adlı dosyayı okur ve içeriği döndürür. Başarılı bir çağrı err == nil döndürür, err == EOF değerini döndürür. ReadFile tüm dosyayı okuduğundan, Read'den bir EOF'a rapor edilecek bir hata olarak davranmaz.
Bunun []byte
yerine bir string
. Gerçekten gerekliyse dönüştürülebilir :
s := string(buf)
İçeriği sadece istediğiniz gibi istiyorsanız, string
basit çözüm ReadFile
işlevi io/ioutil
paketten kullanmaktır. Bu işlev bytes
, kolayca a dönüştürebileceğiniz bir dilim döndürür 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'
}
Bence en iyi şey, eğer tüm bu dosyaları birleştirme verimliliği gerçekten endişe, hepsini aynı bayt arabellek kopyalamak olduğunu düşünüyorum.
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())
Bu, her dosyayı açar, içeriğini buf'e kopyalar, ardından dosyayı kapatır. Durumunuza bağlı olarak, dönüştürmeniz gerekmeyebilir, son satır sadece buf.Bytes () öğesinin aradığınız verilere sahip olduğunu göstermektir.
Bilgisayarla değilim, bu yüzden bir taslak yazıyorum. Söylediklerimden net olabilirsiniz.
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()
}