ExpandPath expande o caractere ~ no início de um caminho para o diretório home do usuário. Se o caminho não começar com ~, ele é retornado sem modificações. A função não suporta a expansão de ~username, retornando um erro nesse caso.
(path string)
| 155 | // Se o caminho não começar com ~, ele é retornado sem modificações. |
| 156 | // A função não suporta a expansão de ~username, retornando um erro nesse caso. |
| 157 | func ExpandPath(path string) (string, error) { |
| 158 | // Verifica se o caminho começa com ~ |
| 159 | if strings.HasPrefix(path, "~") { |
| 160 | // Obtém o diretório home do usuário |
| 161 | home, err := os.UserHomeDir() |
| 162 | if err != nil { |
| 163 | return "", fmt.Errorf("não foi possível obter o diretório home: %w", err) |
| 164 | } |
| 165 | |
| 166 | // Se o caminho for apenas ~, retorna o diretório home |
| 167 | if len(path) == 1 { |
| 168 | return home, nil |
| 169 | } |
| 170 | |
| 171 | // Verifica se o segundo caractere é um separador de diretório. |
| 172 | // Accept both '/' and '\' so that paths like "~/.chatcli" work on Windows |
| 173 | // where filepath.Separator is '\'. |
| 174 | if path[1] == '/' || path[1] == filepath.Separator { |
| 175 | // Constrói o caminho completo a partir do diretório home |
| 176 | path = filepath.Join(home, path[2:]) |
| 177 | } else { |
| 178 | // Expansão de ~username não é suportada |
| 179 | return "", fmt.Errorf("expansão de ~username não é suportada, apenas ~ para o diretório home do usuário atual") |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | // Retorna o caminho original se não começar com ~ |
| 184 | return path, nil |
| 185 | } |