Goでのファイル読み込み

Posted by 地道に続けるブログ on Saturday, November 26, 2022

Goでのfile読み込み方法がわからなかったので調べました。

利用パッケージを調査

「Go file読み込み」で調べてみるとioutil packageを利用する方法が結構ヒットしますが、こちらはdeprecatedになったようです。
https://github.com/golang/go/issues/42026

今はos packageを使うのが良いみたいです。 以下にos packageを使ったコードを示します。

package main

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

func main() {
        // filenameを引数から読み出す
        args := os.Args
        // filanameが引数に設定されていなかったらエラーログ出力
        if len(args) != 2 {
                log.Fatal("not found filename")
        }
        // filename設定
        filename := args[1]
        bin, err := os.ReadFile(filename)
        // error handling: os.ReadFileでerrがnil出なかった場合、エラーログを表示する
        if err != nil {
                log.Fatal(err)
        }
        // 読み込んだ[]byteをstringでキャストし表示する
        fmt.Println(string(bin))        
}

このコード中でファイル読み込みをしている箇所は

bin, err := os.ReadFile(filename)

os.ReadFileの返り値は[]byteです。 従って、fmtでそのまま表示しようとすると想定通り出力にならないので、以下のように型変換する必要があります。

string(bin)

上記のコードをmain.goと名付け保存します。

実行

以下のような内容のファイルを用意し、helloworld.txtと名付け保存します。

hello
world

以下のコマンドを実行します。

go run main.go helloworld.txt
hello
world

ファイル内容が表示されました。

感想

ファイル読み込みしたとき[]byteで返ってくるので、それを型変換しなければならないところが、ちょっと面倒だなと感じました。 他の言語ではどうやってたか、ちょっと気になったので調べてみたいと思います。

参考