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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- osとbufioによるファイル読み込み
- ファイルと一時ファイルへの書き込み
- JSONのエンコードとデコード
- JSONとCSVのストリーミング