Recentemente, precisei obter o caminho absoluto do arquivo atual de um arquivo go. Você primeiro precisa obter o pacote runtime que faz parte do Go
import "runtime"
Em seguida, você pode usar o Caller
método e capturar o nome do arquivo. Precisamos atribuir a esta função 1
para instruí-la a pular um chamador. Você pode ler mais sobre a função aqui
_, filename, _, ok := runtime.Caller(1)
O nome do arquivo será o caminho até o diretório atual do arquivo que chama esta função. O ok
objetivo é verificar se a chamada de função conseguiu localizar as informações solicitadas.
Então, na prática, se você deseja obter um arquivo de configuração em um diretório e em um diretório de configuração, você pode fazer o seguinte
filepath := path.Join(path.Dir(filename), "../config/settings.toml")