小さなファイルがたくさんあります。それらを 1 行ずつ読みたくありません。
Go にファイル全体を文字列変数に読み込む関数はありますか?
func ReadFile(filename string) ([]byte, error)
ReadFile は、filename で指定されたファイルを読み取り、内容を返します。呼び出しが成功すると、err == EOF ではなく、err == nil が返されます。ReadFile はファイル全体を読み取るため、Read からの 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() に含まれていることを示すためのものです。