戻る

Goファイル操作

Oct 1, 2020

Go言語ではosパッケージによってファイル操作を行うことができる. 例としてファイルを開いてバイナリダンプをする.

main.go


package main

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

func main() {
	file, err := os.Open(os.Args[1])
	if err != nil {
		log.Fatalln(err)
	}
	bytes := make([]byte,256,256)
	file.Read(bytes)
	for i,b := range bytes {
		fmt.Println(i,":",b)
	}
}

makeでは(type,len,cap)という形式でメモリを確保する. typeは型, lenは長さ, capは容量. 容量を超える長さを指定するとエラーとなる.

rangeでは, index,element := という形式で各要素を取り出す.

Read関数は配列の長さだけ読み込む.

ダンプするファイルとして適当にサンプルファイルを作った.

aaa.txt


abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789

次のコマンドで実行. Args[1]に対応するのがaaa.txtとなる.


go run main.go aaa.txt

実行結果: 長いのでほとんど省略. byteとしての値が出力される.


0 : 97
1 : 98
...
255 : 0

fmt.Println()では可変長引数をとるが, このように半角スペースが挿入される. そして呼び出すたびに改行されている.

Read関数に渡せるのはsliceである. var bytes[256] byteのように固定長の配列を生成しても, Read関数の引数として渡せずエラーとなる.

同じファイル名のものが既にないか確認する


if _, err := os.Stat(path); os.IsNotExist(err) {
  //ファイルを生成
}