kurumi-bioの雑記帳

プログラミング、パソコン、ペット、 犬、お出かけ

初心者のGo言語 -22- <Mkdir,MkdirAll,MkdirTemp>

こんにちは、kurumi-bioです。

第8回目のosパッケージ(標準ライブラリー)の学習です。

環境

  • Windows
    OSバージョン:Windows11 Home 22H2
    Go言語のバージョン:go version go1.20 windows/amd64
  • Linux
    OSバージョン:openSUSE Leap 15.4
    Go言語のバージョン:go version go1.20.1 linux/amd64

 

Mkdir関数

func Mkdir(name string, perm FileMode) error

関数の説明 mkdir は、指定された名前とパーミッション ビット (umask の前) を持つ新しいディレクトリを作成します。エラーがある場合、タイプは *PathError になります。

◆テストコード

package main

import (
    "fmt"
    "os"
)    
func main() {
    e := os.Mkdir("MkdirTest", 0750)
    if e != nil {
        fmt.Fprintf(os.Stderr, "Error: %v \n", e)
        os.Exit(1)
    }
    
}

カレントディレクトリに名前が"MkdirTest"でパーミッション0750(rwxr-x---)のフォルダを作成するプログラムです。

◆実行結果

"MkdirTest"フォルダが作成されました。

◆実行結果2

"MkdirTest"フォルダが存在するときに実行すると"フォルダ名: file exists"というエラーが発生します。

 

MkdirAll関数

func MkdirAll(path string, perm FileMode) error

関数の説明 MkdirAll は、path という名前のディレクトリと必要な親を作成し、nil を返すか、エラーを返します。許可ビット perm (umask の前) は、MkdirAll が作成するすべてのディレクトリに使用されます。 path が既にディレクトリである場合、MkdirAll は何もせず、nil を返します。

◆テストコード

package main
    
import (
    "fmt"
    "os"
)    
func main() {
    e := os.MkdirAll("MkdirAll/MkdirSub", 0750)
    if e != nil {
        fmt.Printf("err=%v\n", e)
    }
}

カレントディレクトリに名前が"MkdirAll"でパーミッション0750(rwxr-x---)のフォルダと、その直下に名前が"MkdirSub"でパーミッション0750(rwxr-x---)のフォルダを作成するプログラムです。

◆実行結果

"MkdirAll"フォルダと、その直下に"MkdirSub"フォルダが作成されました。

◆実行結果2

既に同名のフォルダが存在する状態で再度実行しましたがos.Mkdirと異なりエラーになりませんでした。

**広告の下に続きます。**

 

MkdirTemp関数

func MkdirTemp(dir, pattern string) (string, error)

関数の説明 MkdirTemp は、ディレクトリ dir に新しい一時ディレクトリを作成し、新しいディレクトリのパス名を返します。新しいディレクトリの名前は、パターンの末尾にランダムな文字列を追加することによって生成されます。 pattern に "*" が含まれている場合、代わりに最後の "*" がランダムな文字列に置き換えられます。 dir が空の文字列の場合、MkdirTemp は、TempDir によって返される一時ファイルの既定のディレクトリを使用します。 MkdirTemp を同時に呼び出す複数のプログラムまたはゴルーチンは、同じディレクトリを選択しません。不要になったディレクトリを削除するのは、呼び出し元の責任です。

◆テストコード

package main

import (
    "fmt"
    "os"
)         
func main() {
    d, e := os.MkdirTemp("", "temp")
    if e != nil {
        fmt.Fprintf(os.Stderr, "Error: %v \n", e)
        os.Exit(1)
    } else {
        fmt.Printf("Path=[%s]\n", d)
    }    
    d, e = os.MkdirTemp("", "te*mp")
    if e != nil {
        fmt.Fprintf(os.Stderr, "Error: %v \n", e)
        os.Exit(1)
    } else {
        fmt.Printf("Path=[%s]\n", d)
    }
}

一時ファイルの既定のディレクトリに"temp+ランダムな文字列"フォルダと"te+ランダムな文字列+mp"フォルダを作成するプログラムです。

◆実行結果(Windows)

Windowsの実行結果です。環境変数TEMPに指定しているパスの直下に一時ディレクトリが作成されました。

◆実行結果(Linux)

Linuxの実行結果です。環境変数にTEMPが無いので、一時ファイルの規定のディレクトリは、/tmpで固定だと思われます。ランダムな文字列は、毎回違う値になります。

**最後までご覧いただきありがとうございます**