0Pricing
Go Academy · レッスン

osとbufioによるファイル読み込み

ファイルを安全に開き、行を読み込み、閉じます。

「osとbufioによるファイル読み込み」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

os.ReadFile

os.ReadFile(Go 1.16 以降)は、ファイル全体を 1 回の呼び出しでバイトスライスに読み込みます。小さなファイルに適した、シンプルで慣用的な方法です。

data, err := os.ReadFile("config.json")
if err != nil { log.Fatal(err) }
fmt.Println(string(data))

os.Open と手動クローズ

より細かく制御するには、os.Open(読み取り専用)でファイルを開き、defer でクローズします。

f, err := os.Open("data.txt")
if err != nil { return err }
defer f.Close()

バッファへの読み込み

f.Read(buf) でバイトのチャンクを読み込みます。読み込んだバイト数を返し、ファイルの末尾では io.EOF を返します。

buf := make([]byte, 1024)
n, err := f.Read(buf)
if err != nil && err != io.EOF { return err }
fmt.Println(string(buf[:n]))

bufio.NewReader

ファイルを bufio.Reader でラップすると読み取りがバッファリングされ、システムコールを減らせます。メソッドには ReadString、ReadLine、ReadByte などがあります。

reader := bufio.NewReader(f)
line, err := reader.ReadString('\n')

bufio.Scanner による行単位の読み取り

bufio.NewScanner は、テキストファイルを行単位で読み取る慣用的な方法です。デフォルトの分割関数は ScanLines です。

scanner := bufio.NewScanner(f)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil { return err }

スキャナーのカスタムバッファ

スキャナーのデフォルトバッファは 64 KiB です。非常に長い行を含むファイルでは、scanner.Buffer でバッファを大きくしてください。

buf := make([]byte, 1024*1024)
scanner.Buffer(buf, len(buf))

io.ReadAll

io.ReadAll は任意の io.Reader から EOF まで読み取り、バイト列を返します。ネットワーク接続、レスポンスボディ、またはリーダーでラップしたファイルの読み取りに便利です。

data, err := io.ReadAll(f)

単語とバイトのスキャン

スキャナーの分割関数を置き換えると、単語(bufio.ScanWords)または個々のバイト(bufio.ScanBytes)をスキャンできます。

scanner.Split(bufio.ScanWords)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}

構造化テキストの読み取り

行を読み取った後、strings.Fields または strings.Split を使って列を解析します。

for scanner.Scan() {
    fields := strings.Fields(scanner.Text())
    // fields[0], fields[1], ...
}

ファイル読み取り時のエラー

スキャンループの後には必ず scanner の Err() を確認してください。これは EOF 以外で最初に発生したエラーを返します。行をスキャンせずにループが正常終了した場合でも、エラーが発生している可能性があります。

名前付き stdin の読み取り

io.Reader を受け取る場所では、どこでも os.Stdin を使用できます。これにより CLI ツールが、ファイル引数とパイプからの入力の両方に対応できます。

scanner := bufio.NewScanner(os.Stdin)

クイックチェック

Go でテキストファイルを行単位で読み取る慣用的な bufio 型はどれですか。

まとめ: ファイルの読み取り

要点:

  • os.ReadFile: 小さなファイル全体を 1 回の呼び出しで読み取ります
  • bufio.Scanner: 行単位で読み取り、ループ後に Err() を確認します
  • bufio.Reader: 読み取りをバッファリングしてシステムコールを減らします
  • io.ReadAll: 任意の io.Reader を最後まで読み取ります

よくある質問

「osとbufioによるファイル読み込み」レッスンは無料ですか?

はい。「osとbufioによるファイル読み込み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「osとbufioによるファイル読み込み」で何を学びますか?

ファイルを安全に開き、行を読み込み、閉じます。 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「osとbufioによるファイル読み込み」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. osとbufioによるファイル読み込み
  2. ファイルと一時ファイルへの書き込み
  3. JSONのエンコードとデコード
  4. JSONとCSVのストリーミング
← Go Academyに戻る