A melhor maneira de obter o diretório inicial do usuário em execução é a seguinte? Ou há uma função específica que eu olhei?
os.Getenv("HOME")
Se o acima estiver correto, por acaso alguém sabe se esta abordagem funcionará garantidamente em plataformas não Linux, por exemplo, Windows?
go
home-directory
Paul Ruane
fonte
fonte
$HOME
não é necessariamente o diretório inicial do usuário. Por exemplo, posso escreverexport HOME=/something/else
antes de lançar seu programa. Normalmente, isso significa que desejo que o programa seja tratado/something/else
como meu diretório inicial por algum motivo e, geralmente, o programa deve aceitar isso. Mas se você realmente precisa do diretório inicial real do usuário , uma variável de ambiente não necessariamente o fornecerá a você.Respostas:
No go 1.0.3 (provavelmente antes também) funciona o seguinte:
Se for importante a compilação cruzada, considere a
homedir
bibliotecafonte
os.UserHomeDir ()
Em go1.12 + você pode usar os.UserHomeDir ()
Veja https://golang.org/pkg/os/#UserHomeDir
Isso deve funcionar mesmo sem o CGO habilitado (ou seja
FROM scratch
) e sem ter que analisar/etc/passwd
ou fazer qualquer outra coisa sem sentido.fonte
Por exemplo,
fonte
USERPROFILE
é a raiz do espaço de armazenamento do usuário no sistema, mas NÃO é o local onde os aplicativos devem ser gravados fora de um prompt de diálogo de salvamento. Se você tiver a configuração do aplicativo, ela deve ser gravadaAPPDATA
e, se você tiver o cache do aplicativo (ou arquivos grandes que não devem ser sincronizados pela rede), ela deve ser gravadaLOCALAPPDATA
no Windows.Esta é uma maneira agradável e concisa de fazer isso (se você estiver executando apenas em um sistema baseado em UNIX):
Isso apenas consulta a variável de ambiente $ HOME.
--- Editar ---
Agora vejo que esse mesmo método foi sugerido acima. Vou deixar este exemplo aqui como uma solução destilada.
fonte
Resposta semelhante a @peterSO, mas respeita o
XDG_CONFIG_HOME
caminho para o linux.fonte
APPDATA
para configuração eLOCALAPPDATA
para arquivos grandes. Para uma "casa" de uso geral, eu recomendoLOCALAPPDATA
, por padrão, os desenvolvedores de aplicativos não estão destruindo redes corporativas. 😊Você deve usar a variável de ambiente
USERPROFILE
ouHOMEPATH
no Windows. Consulte Variáveis de ambiente reconhecidas (um link de documentação mais apropriado seria bem-vindo).fonte
HOME
, pois isso provavelmente significa que você está executando no cygwin.USERPROFILE
ouHOMEPATH
no Windows na grande maioria dos casos. Em quase todos os casos em que os desenvolvedores os usam, o que eles deveriam usar éAPPDATA
ouLOCALAPPDATA
(dependendo se é razoável que o conteúdo seja sincronizado pela rede no login / logout).go1.8rc2 tem a função go / build / defaultGOPATH que obtém o diretório inicial. https://github.com/golang/go/blob/go1.8rc2/src/go/build/build.go#L260-L277
O código a seguir é extraído da função defaultGOPATH.
fonte
APPDATA
ouLOCALAPPDATA
quase sempre a escolha certa, nãoUSERPROFILE
, no Windows.