Verificando se um diretório existe

Go:
Verificando se um diretório existe

Como fazer:

Em Go, o pacote os fornece funcionalidades para interagir com o sistema operacional, incluindo a verificação da existência de um diretório. Veja como você pode fazer isso:

package main

import (
    "fmt"
    "os"
)

// isDirExists verifica se um diretório existe
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("O diretório %s existe.\n", dirPath)
    } else {
        fmt.Printf("O diretório %s não existe.\n", dirPath)
    }
}

Exemplo de saída:

O diretório /tmp/exampleDir existe.

ou

O diretório /tmp/exampleDir não existe.

Dependendo de se /tmp/exampleDir existe.

Aprofundando

A função os.Stat retorna uma interface FileInfo e um erro. Se o erro for do tipo os.ErrNotExist, significa que o diretório não existe. Se não houver erro, verificamos mais se o caminho realmente referencia um diretório através do método IsDir() da interface FileInfo.

Esse método se destaca pela sua simplicidade e eficácia, mas é importante notar que a verificação da existência de um diretório antes de realizar operações como criar ou escrever poderia levar a condições de corrida em ambientes concorrentes. Para muitos cenários, especialmente em aplicações concorrentes, pode ser mais seguro tentar a operação (por exemplo, criação de arquivo) e tratar os erros posteriormente, em vez de verificar primeiro.

Historicamente, essa abordagem tem sido comum na programação devido à sua lógica direta. No entanto, a evolução da computação multi-threaded e concorrente necessita de uma mudança em direção a um tratamento de erros mais robusto e evitar verificações de pré-condição como essa quando possível. Isso não diminui sua utilidade para aplicações ou scripts mais simples e de thread único, onde tais condições são menos preocupantes.