Go:
디렉토리가 존재하는지 확인하기
방법:
Go에서는 os
패키지가 운영 체제와 상호 작용하는 기능을 제공하며, 이에는 디렉토리가 있는지 확인하는 기능도 포함됩니다. 다음은 그 방법입니다:
package main
import (
"fmt"
"os"
)
// isDirExists는 디렉토리가 존재하는지 확인합니다
func isDirExists(path string) bool {
info, err := os.Stat(path)
if os.IsNotExist(err) {
return false
}
return info.IsDir()
}
func main() {
dirPath := "/tmp/exampleDir"
if isDirExists(dirPath) {
fmt.Printf("디렉토리 %s가 존재합니다.\n", dirPath)
} else {
fmt.Printf("디렉토리 %s가 존재하지 않습니다.\n", dirPath)
}
}
예시 출력:
디렉토리 /tmp/exampleDir가 존재합니다.
또는
디렉토리 /tmp/exampleDir가 존재하지 않습니다.
/tmp/exampleDir
이 존재하는지에 따라 달라집니다.
깊이 있는 탐구
함수 os.Stat
은 FileInfo
인터페이스와 오류를 반환합니다. 오류의 유형이 os.ErrNotExist
라면, 디렉토리가 존재하지 않는 것을 의미합니다. 오류가 없다면, 우리는 FileInfo
인터페이스에서 IsDir()
메소드를 통해 경로가 실제로 디렉토리를 참조하는지 추가로 확인합니다.
이 방법은 단순함과 효과성으로 인해 두드러지지만, 생성 또는 쓰기와 같은 작업을 하기 전에 디렉토리 존재 여부를 확인하는 것은 동시성 환경에서 경쟁 상태를 초래할 수 있다는 점을 유의해야 합니다. 특히 동시성 애플리케이션에서는 체크하기보다는 비록 (파일 생성과 같은) 작업을 시도하고 사후에 오류를 처리하는 것이 더 안전할 수 있습니다.
역사적으로, 이러한 접근법은 직관적인 논리 때문에 프로그래밍에서 보편적이었습니다. 하지만, 멀티 스레드 및 동시성 컴퓨팅의 발전은 가능한 이러한 사전 조건 체크를 피하면서 더 견고한 오류 처리로의 전환을 필요로 합니다. 이는 조건이 덜 우려되는 단일 스레드 애플리케이션이나 스크립트에 대한 그 유용성을 감소시키지 않습니다.