main.goファイルと同階層に「hello」と記載されたsample.txtファイルを作ってみる。
package main import ( "log" "os" ) func main() { var file *os.File _, err := os.Stat("sample.txt") if err != nil { file, err = os.Create("sample.txt") if err != nil { log.Fatal(err) } } else { file, err = os.Open("sample.txt") if err != nil { log.Fatal(err) } } defer file.Close() content := []byte("hello") file.Write(content) }
var file *os.FileでosパッケージにあるFile型の変数を指定する。_, err := os.Stat("sample.txt")のos.Statは、main.goファイルと同じ階層にsample.txtがあるかどうかをチェックしている。if err != nil { file, err = os.Create("sample.txt")で、os.Statがもしerrorがあればo.sCreateを実行して、もしerrorがなければos.Openでファイルを開く。
ファイルを作成しても、開いてもdefer file.Close()で一番最後の関数でファイルを閉じる。
content := []byte("hello")でsample.txtファイルに書き込みたいhelloを文字列をbyte列に変換する。file.Write(content)でsample.txtファイルに書き込みを行うとsample.txtファイルに下記のようにhelloが記載される。
次にfolderディレクトリを作り、そこを作業ディレクトリとするコードを記載する。
package main import ( "log" "os" "path/filepath" ) func main() { _, err := os.Stat("folder") if err != nil { err = os.Mkdir("folder", 0755) if err != nil { log.Fatal(err) } } currentDir, err := filepath.Abs(".") if err != nil { log.Fatal(err) } err = os.Chdir(currentDir + "/folder") if err != nil { log.Fatal(err) } var file *os.File _, err = os.Stat("sample.txt") if err != nil { file, err = os.Create("sample.txt") if err != nil { log.Fatal(err) } } else { file, err = os.Open("sample.txt") if err != nil { log.Fatal(err) } } defer file.Close() content := []byte("hello") file.Write(content) }
_, err := os.Stat("folder")でmain.goファイルと同じ階層にfolderがあるかチェックする。ディレクトリがなければ、Mkdir("folder", 0755)でフォルダを作成する。currentDir, err := filepath.Abs(".")でmain.goが格納されているディレクトリを調べる。err = os.Chdir(currentDir + "/folder")でappディレクトリの下にあるfolderディレクトリに作業ディレクトリを変更する。後は、上記と同じようにsample.txtにコードを記載して、file.Write(content)で書き込むと上記と同じhelloが表示される。
フォルダとファイルは、下の画像のように生成される。