今回は、osパッケージを利用するのをテーマに進めました。
githubのリポジトリにもpush済みですので、ソースコードはそちらをご覧ください。
私が動作させた関数は以下です。
- Open
- Getenv
- IsExist
- IsNotExist
- Chdir
- Remove
- RemoveAll
- Mkdir
- MkdirAll
- Environ
ちなみに、"~"を使うと、カレントディレクトリに"~"というディレクトリができて困ることになります。
ディレクトリの存在チェック
os.Open()を使います。ディレクトリが存在しない場合は、戻り値にerrorが返されるので、直接errorを判定してもいいですが、IsExist()とIsNotExist()を呼ぶと、true/falseで存在チェックができるようになっているので、そちらを利用する方が便利です。
RemoveAllとRemove、MkdirAllとMkdirの違いですが、複数階層のディレクトリを指定する場合は、RemoveAll()、MkdirAll()を呼び出さないと、ディレクトリの作成、削除はできません。(errorが返されます)存在するディレクトリに新たにディレクトリを作る/削除する場合は、Mkdir()、Remove()でも実行できます。
Chdir()はカレントディレクトリを移動します。
Environ()は環境変数名の一覧を取得する関数です。Getenv()の引数もEnviron()で取得できる文字列を指定すれば、環境変数の設定を取得する事ができます。
それから、今回はWindowsでの動作が「サポートされていない」という状況が多かったのでWindowsで動作を検証していた+Takanobu Haginoさんは、ちょっとお困りのようでした。
Windowsにはuidなどの属性が存在しないのでGetuid()などを呼び出しても-1しか返ってきません。実装がreturn -1になっています。(syscallパッケージのソースコードに書かれています)(これはWindowsの仕組み上、どうしようもないと思われる)
osパッケージは内部でsyscallパッケージの関数を呼び出すようになっている事が多いので、syscallパッケージを触ってみる方が良いのかもしれません。
ということで、今回はあまり動かせなかったので、また今度osパッケージを使う(2回目)が行われることでしょう。
次回の#6はtemplateパッケージ(私は最近使わなくなってしまった…)の使い方がテーマになる予定です。
0 件のコメント:
コメントを投稿