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) {
//ファイルを生成
}