LoginSignup
6
5

More than 5 years have passed since last update.

[入門]Go言語でファイル読み書きをやってみよう

Posted at

はじめに

  • 当記事は、Go言語のファイル読み込み、書き出しの方法を記載しております。

注意点

  • 読者の知識レベルは、以下の方を想定しております。

    • プログラミングの基礎的な知識がある
      • 変数とは何か、関数とは何か
      • 変数や関数を定義できるか
    • 何か言語を触ったことがある
      • C言語やJava言語、Python言語など
  • 上手く実施できなかった場合や、不明な点がある際は、コメントを記載していただければ幸いです。

実行環境

  • OS
    • Windows10 Pro 64-bit
  • エディタ
    • VisualStudio Code
  • 作業ディレクトリ
    • C:\Users\Romeo\Documents\go

ファイル読み込み

事前準備

  • 今回は、テキストファイルの読み込みを実施するので、先にファイルを用意しておきましょう。
  • "C:\Users\Romeo\Documents\go"配下に、test.txtを作成します。
  • 内容は何でも良いですが、私は以下のように作成しました。
test.txt
Hi.
This is a test file.

ソースコード

  • FileRead.goを新規作成し、以下の内容を格納します。
FileRead.go
package main

import (
    "fmt"
    "log"
    "os"
)

const BUFSIZE = 1024    //読み込む際のバッファサイズ指定

func main() {
    file, err := os.Open(`C:\Users\Romeo\Documents\test.txt`)   //ファイルオープン
    if err != nil {
        log.Fatal(err)  //ファイルが開けなかったときエラー出力
    }
    defer file.Close()  //全部の処理終了後にファイルクローズ

    buf := make([]byte, BUFSIZE)    //byte型配列に格納
    for {   //繰り返し読み込み
        n, err := file.Read(buf)    //ファイル読み込み
        if n == 0 {
            break   //中身がなくなったらbreak
        }
        if err != nil {
            log.Fatal(err)
            break   //ファイル読み込みに失敗したらbreak
        }

        fmt.Printf(string(buf[:n])) //読み込んだ内容を出力
    }
}

実行結果

C:\Users\Romeo\Documents\go> go run FileRead.go
Hi.
This is a test file.

ソースコード解説

  • 基本的には、よくあるファイル読み込みアルゴリズムと同じだと思います。
  • 今回インポートしたパッケージは3つです。

    • fmt
      • 標準出力のため
    • log
      • エラー出力のため
    • os
      • ファイルを取り扱うため
  • ファイルオープン時には、エラー変数が返ってきます。しっかり受け取り、エラー処理まで記載しましょう。

    • deferにファイルクローズ関数を記載することを忘れずに
一部抜粋
file, err := os.Open(`C:\Users\Romeo\Documents\test.txt`)   //ファイルオープン
    if err != nil {
        log.Fatal(err)  //ファイルが開けなかったときエラー出力
    }
defer file.Close()  //ファイルクローズ

ファイル書き込み

ソースコード

  • FileWrite.goを新規作成し、以下の内容を格納します。
  • 今回のプログラムでは、test2.txtを新規作成し、そこに"testmessage"を書き込みます。
FileWrite.go
package main

import (
    "os"
)

func main() {
    file, err := os.Create(`C:\Users\Romeo\Documents\test2.txt`)
    if err != nil {
        log.Fatal(err)  //ファイルが開けなかったときエラー出力
    }
    defer file.Close()

    output := "testmessage"
    file.Write(([]byte)(output))
}

実行結果

test2.txt
testmessage

ソースコード解説

  • こちらも、よくあるアルゴリズムだと思います。
  • outputという変数に、書き込みたい内容を記載しております。

最後に

  • 変数定義やエラー出力など、慣れない点も多々ありました。
  • ファイル読み書きは初歩中の初歩なので、これをベースに更に勉学に励みます。
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5