BackEnd

Golangのファイル操作基本

投稿日:

はじめに

まだまだGolang勉強中のnukkyです。今回は理解は必須であろうファイル操作についてまとめてみました。

ファイル/ディレクトリの操作

ファイル/ディレクトリの存在を確認

os.Open 関数を使ってファイルやディレクトリの存在を確認します。

ファイル/ディレクトリの名前変更

名前の変更は os.Rename を使用します。

ファイル/ディレクトリの削除

os.Remove を使用してファイルやディレクトリを削除します。

ただし、上記の処理ではファイルが存在するディレクトリは削除できないので、中にあるファイルごと全て削除したい場合には、 os.RemoveAll() を使用します。

ディレクトリ内のファイル確認

ディレクトリ内のファイル一覧を取得したい場合、 io/ioutil の ReadDir() を使用します。

ファイルの作成

ファイルの簡単な読み書きをするには os.Open / os.Create 関数で充分ですが、もっと細かな設定とともにファイルを開きたい場合には os.OpenFile 関数を使います。 os.OpenFile 関数は以下の引数が設定されています。

  1. ファイル名 string
  2. フラグ int
  3. ファイルモード(POSIX パーミッション) FileMode

第2引数のフラグは os パッケージに定義されている定数を指定します。

例えば、ファイルを読み書き可能、無ければ作成、既に存在するならエラーを返す、という条件で開きたい場合は、以下のように指定します。

第3引数のファイルモードでは32ビットの下位9ビットで POSIX パーミッションを指定します。 POSIX パーミッションは0から始まる8進の整数リテラルを指定します。たとえばパーミッションとして「rwxr-xr-x」を与えたい場合は「0755」を指定します。 「rw-rw-rw-」なら「0666」です。

また、ファイルモードでは一部定数も用意されています、

どのように使用するかと言いますと例えば「drwxr-xr-x」を与えたい場合に以下のように指定します。

ディレクトリの作成

os.Mkdir()が使えます。第二引数はモードです。

ファイルの読み書き

ioutil.ReadFile

ioutil.ReadFile を使えば一度にファイルの内容を読み込むことができます。
取得したデータはバイト型なので、文字列型にする場合は以下のように string(data) します。

ioutil.ReadAll

ioutil.ReadAll は開いているファイルをEOFまですべて読み込みます。
ファイルの内容はバイト型なので、文字列型として使用する場合は string(data) します。

ioutil.WriteFile

ioutil.WriteFile はファイルに一度にデータを書き込む関数です。ファイルが存在していなければ、新規で作成されます。
ioutil.WriteFile の引数は、第一引数にファイルのパス、第二引数に書き込む文字をバイト化したもの、第三引数はファイルのパーミッションです。

io.Copy

ファイルからファイルに内容をコピーするには、io.Copy を使います。
io.Copy の引数は io.Writer と io.Reader になります。
なので、その要件を満たすもの(*os.File など)を渡します。

ファイルなどの内容を一行ずつ処理

改行区切りで一行ずつ処理するには、 bufio.NewScanner でループ処理します。
Scan() 関数は、行がある限り true を返すので、Text() で一行ずつ取得できます。

TOML

ファイル操作ということで、最後におまけ程度ですが設定ファイルについて、単純なtxt配列で設定ファイルを用意しても良いのですが、 go の場合 TOML がとても便利なので簡単に紹介させていただきます。https://github.com/BurntSushi/toml

.tomlファイル

設定ファイルとして拡張子 toml のファイルを作成します、サンプルとして中身はこのようにします。

設定ファイルの読み込み

それでは上記の設定ファイルを実際に読み込めるようにしたいと思います。

 

さいごに

ファイル操作はアプリの基本ですので、しっかり押さえておきたいと思います。

おすすめ書籍

スターティングGo言語 (CodeZine BOOKS)  Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ  改訂2版 みんなのGo言語

blog-page_footer_336




blog-page_footer_336




-BackEnd
-

執筆者:

         

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

laravel logo

Laravel SailでDocker環境構築

1 はじめに2 Laravel Sailの基本2.1 Dockerの構成2.2 コンテナの起動・停止2.3 sailで使用できるコマンド3 Laravel Sailの設定3.1 ポートフォワードの設定 ...

laravel logo

Laravelでテストコードを書くには? Featureテスト/Unitテスト

1 はじめに2 FeatureとUnitの使い分け3 テスト用データベースの準備4 Featureテスト4.1 テスト対象のコード4.2 テストコードの実装4.3 テスト結果の検証4.3.1 ステータ ...

Go言語

gorpを使ってDBを操作する

1 はじめに1.1 GoのORM1.2 gorpの紹介2 gorpの基本操作2.1 insert2.2 select2.3 update2.4 delete3 構造体のmapping4 テーブルの作成 ...

rails

【Puma】アプリサーバのチューニング

1 はじめに2 チューニングで注意する項目3 子プロセスの数3.1 最低3つの子プロセスを割り当てる3.2 最大子プロセス数3.3 CPUコア数と子プロセス数3.4 なぜPumaの子プロセス数を増やす ...

php logo

PHPでGmail APIを利用してメールデータを取得してみる その2

1 はじめに2 メールの内容取得3 MessagePartオブジェクト3.1 件名3.2 本文4 multipartの場合4.1 本文の取得5 全文6 さいごに7 おすすめ書籍 はじめに 前回は、Gm ...

フォロー

follow us in feedly

blog-page_side_responsive

2020年7月
 1234
567891011
12131415161718
19202122232425
262728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。