Go でテキスト ファイルを操作する場合、その内容を読み取る方法を理解することが不可欠です。ただし、「テキスト ファイルを読み取るにはどうすればよいですか? [重複]」という質問は、このタスクが見た目よりも複雑である可能性を示唆しています。
あなたが提供したコード:
package main import ( "fmt" "os" "log" ) func main() { file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } fmt.Print(file) }
はファイルを正常に読み取りますが、出力は単なるファイル記述子 (*os.File) のポインター値です。実際にファイルの内容を取得するには、いくつかの手法のいずれかを使用する必要があります。
小さなファイルの場合、最も簡単な方法は、io/ioutil.ReadAll を使用して読み込むことです。ファイル全体をメモリに読み込みます。
func main() { file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } defer file.Close() b, err := io.ReadAll(file) fmt.Print(b) }
大きなファイルの場合は読み込みますチャンクはメモリ効率を高めることができます。
func main() { file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } defer file.Close() buf := make([]byte, 32*1024) for { n, err := file.Read(buf) if n > 0 { fmt.Print(buf[:n]) } if err == io.EOF { break } if err != nil { log.Printf("read %d bytes: %v", n, err) break } } }
最後に、bufio パッケージを使用して、区切り文字に基づいてトークンでファイルを読み取るスキャナーを作成できます。 (デフォルトでは改行).
func main() { file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) fmt.Println(scanner.Bytes()) } }
以上がGo でテキスト ファイルの内容を読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。