23.2. 프로그램언어 고(Go)의 디렉토리 생성과 삭제

프로그램언어 고(Go)에서의 디렉토리 생성 방법

Go언어에서 디렉토리를 생성하는 방법을 설명드리겠습니다.


package main

import "os"

func main() {

    // 디렉토리 경로 지정
    path := "./tmp/test"

    // 디렉토리 생성
    err := os.MkdirAll(path, os.ModePerm)
    if err != nil {
        panic(err)
    }

    // 생성된 디렉토리 정보 출력
    info, err := os.Stat(path)
    if err != nil {
        panic(err)
    }
    println(info.Name(), info.IsDir())

}

위의 코드는 임시 디렉토리인 ./tmp 아래에 test라는 디렉토리를 생성하는 예제입니다.

주요 함수는 os.MkdirAll()입니다. 이 함수를 통해 경로에 해당하는 디렉토리를 생성할 수 있습니다.

os.MkdirAll() 함수의 첫 번째 인자는 생성할 디렉토리의 경로입니다. 여기서는 “./tmp/test”로 지정했습니다.

두 번째 인자는 디렉토리의 권한입니다. os.ModePerm은 0777 권한을 의미합니다.

디렉토리가 제대로 생성되었는지 확인하기 위해 os.Stat() 함수를 사용하여 디렉토리 정보를 출력하고 있습니다.

os.MkdirAll()은 중간 디렉토리가 없다면 중간 디렉토리도 함께 생성합니다.

예를 들어 ./tmp 디렉토리가 없다면 ./tmp 디렉토리도 함께 생성됩니다.

따라서 디렉토리 계층 구조를 생성할 때 매우 유용합니다.

이 외에도 디렉토리 생성을 위해 os.Mkdir() 함수를 사용할 수 있습니다.

다만 os.Mkdir()은 중간 디렉토리가 없다면 에러를 발생합니다.

위 예제에서 os.Mkdir()을 사용하면 ./tmp 디렉토리가 없다면 에러가 나게 됩니다.

따라서 디렉토리 생성 시 os.MkdirAll() 함수를 주로 사용하는 편입니다.

이상으로 Go언어에서 디렉토리를 생성하는 방법에 대해 간단히 설명해드렸습니다.

예제와 함께 구체적으로 설명드릴 수 있었기를 바랍니다.

더 궁금하신 점이 있다면 언제든지 문의주세요.

프로그램언어 고(Go)에서의 하위 디렉토리 생성과 함께의 디렉토리 생성 방법

package main

import (
    "os"
)

func main() {

    // 새로운 디렉토리 생성
    err := os.Mkdir("newdir", 0755)
    if err != nil {
        panic(err)
    }

    // newdir 디렉토리 아래에 subdir 디렉토리 생성
    err = os.MkdirAll("newdir/subdir", 0755)
    if err != nil {
        panic(err) 
    }

}

고(Go)에서 하위 디렉토리를 함께 생성하면서 상위 디렉토리를 만들 때는 os.MkdirAll 함수를 사용합니다.

예제코드에서 os.Mkdir 함수를 사용하여 먼저 “newdir” 디렉토리를 생성합니다.

그리고 나서 os.MkdirAll 함수를 사용하여 “newdir” 디렉토리 아래에 “subdir” 디렉토리를 생성합니다.

os.MkdirAll 함수는 하위 디렉토리를 생성하기 전에 상위 디렉토리가 있는지 확인하여 없다면 상위 디렉토리도 함께 생성합니다.

따라서 “newdir” 디렉토리가 없어도 “newdir/subdir” 경로를 입력하면 “newdir” 디렉토리를 먼저 만들고 그 아래에 “subdir” 디렉토리를 생성합니다.

os.MkdirAll 함수를 사용하면 이처럼 하위 디렉토리 생성과 함께 상위 디렉토리도 함께 생성할 수 있기 때문에 편리합니다.

에러 처리를 위해 os.Mkdir, os.MkdirAll 함수 실행 후 발생하는 에러를 체크하는 코드도 함께 작성하는 것이 좋습니다.

프로그램언어 고(Go)의 디렉토리 삭제 방법

Go언어에서 디렉토리를 삭제하는 방법은 다음과 같습니다.


import "os"

err := os.RemoveAll("/tmp/mydir")
if err != nil {
    log.Fatal(err)
}

os 패키지의 RemoveAll 함수를 사용하면 주어진 경로의 디렉토리를 삭제할 수 있습니다.

예제에서 /tmp/mydir 디렉토리를 삭제하고 있습니다.

RemoveAll 함수가 성공하면 err은 nil이 반환되고, 실패하면 err에 오류가 설정됩니다.

따라서 오류 처리를 위해 if 문으로 err을 체크하는 것이 좋습니다.

오류가 있다면 log.Fatal 함수로 기록하고 프로그램을 종료할 수 있습니다.

RemoveAll 함수는 주어진 경로 아래의 모든 파일과 디렉토리를 재귀적으로 삭제합니다.

단, 시스템 루트 디렉토리(Unix의 /)는 삭제할 수 없으므로 주의가 필요합니다.

이상으로 Go언어에서의 디렉토리 삭제 방법에 대한 간략한 설명을 드렸습니다.
코드 예제와 함께 충분한 설명을 제공했기를 바랍니다.

앞으로 더욱 친절하고 부족함 없는 답변 드리도록 노력하겠습니다.

프로그램언어 고(Go)에서의 하위 디렉토리와 함께의 디렉토리 삭제 방법

package main

import (
    "fmt"
    "os"
)

func removeDir(dir string) error {
    return os.RemoveAll(dir)
}

func main() {
    err := removeDir("/path/to/directory")
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println("Directory deleted successfully") 
}

프로그램언어 고(Go)에서 하위 디렉토리를 함께 삭제하고 싶은 경우 os 패키지의 RemoveAll 함수를 사용할 수 있습니다.

RemoveAll 함수는 주어진 경로에 있는 파일 및 디렉토리를 모두 삭제합니다. 경로가 디렉토리인 경우, 그 디렉토리 안에 있는 모든 파일과 서브디렉토리를 함께 삭제합니다.

예제 코드에서는 “/path/to/directory” 경로를 전달하여 그 디렉토리를 삭제합니다.

삭제 과정에서 에러가 발생할 수 있기 때문에 RemoveAll 함수의 반환값으로 에러를 체크하고, 에러가 있을 경우 에러를 출력합니다.

디렉토리가 성공적으로 삭제되면 “Directory deleted successfully” 라는 메시지를 출력합니다.

이 방식으로 하위 디렉토리와 함께 손쉽게 디렉토리 삭제를 할 수 있습니다. 필요한 경우에 이 함수를 사용하시기 바랍니다.

프로그램언어 고(Go)에서의 디렉토리 생성 및 삭제에 대한 오류 처리 방식

package main

import (
    "errors"
    "os"
)

func createDirectory(path string) error {
    err := os.MkdirAll(path, os.ModePerm)
    if err != nil {
        return err
    }
    return nil
}

func removeDirectory(path string) error {
    err := os.RemoveAll(path)
    if err != nil {
        return err
    }
    return nil
}

func main() {
    err := createDirectory("/tmp/mydir")
    if err != nil {
        // 디렉토리 생성 오류 처리
    }

    err = removeDirectory("/tmp/mydir")
    if err != nil {
        // 디렉토리 삭제 오류 처리 
    }
}

Go언어에서 디렉토리를 생성하고 삭제할 때 os 패키지의 MkdirAll과 RemoveAll 함수를 주로 사용합니다.

이 함수들은 오류가 발생하면 error타입의 값을 반환합니다. 그래서 보통 아래와 같은 패턴으로 오류를 처리합니다.

1. MkdirAll이나 RemoveAll 함수를 호출합니다.
2. 반환값이 nil이 아니라면 오류가 발생한 것이므로 err 변수에 오류를 담습니다.
3. err값이 nil이 아니라면 오류 처리 로직을 수행합니다.

이러한 패턴으로 오류가 발생했는지 여부를 체크하고 오류별로 처리할 수 있습니다.

주로 발생할 수 있는 오류로는 다음이 있습니다.

– 권한 오류 : 현재 사용자가 대상 디렉토리에 접근할 수 있는 권한이 없는 경우
– 경로 오류 : 대상 경로가 잘못指定된 경우
– 디스크 오류 : 디스크가 가득 찬 경우

이러한 오류들은 errors.Is 함수를 사용하여 타입별로 처리할 수 있습니다.


err := removeDirectory("/tmp/mydir")
if errors.Is(err, os.ErrPermission) {
    // 권한 오류 처리
} else if errors.Is(err, os.ErrNotExist) {
    // 경로 오류 처리
} else if errors.Is(err, os.ErrInvalid) {
    // 디스크 오류 처리
}

위와 같이 오류 타입을 구분하여 각기 다른 오류 처리 로직을 수행할 수 있습니다.

또한 error 타입은 Error() 메서드를 사용하여 오류 메시지에 접근할 수도 있습니다.


err := removeDirectory("/tmp/mydir") 
if err != nil {
    fmt.Println(err.Error()) // "permission denied"
}

이를 통해 보다 구체적인 오류 원인을 알아낼 수 있습니다.

이와 같이 Go언어에서는 오류를 error 타입으로 반환받아 처리하는 것이 일반적입니다.
if문을 사용하여 오류 발생 여부를 체크하고, error 타입의 기능을 이용하여 오류의 세부 정보에 접근할 수 있습니다.

Leave a Comment