У меня есть программа, которая принимает папку назначения, в которой будут созданы файлы. Моя программа должна иметь возможность обрабатывать абсолютные пути, а также относительные пути. Моя проблема в том, что я не знаю, как расширить ~
в домашний каталог.Развернуть тильду в домашний каталог
Моя функция для расширения адресата выглядит так. Если заданный путь является абсолютным, он ничего не делает, иначе он соединяет относительный путь с текущим рабочим каталогом.
import "path"
import "os"
// var destination *String is the user input
func expandPath() {
if path.IsAbs(*destination) {
return
}
cwd, err := os.Getwd()
checkError(err)
*destination = path.Join(cwd, *destination)
}
Поскольку path.Join
не расширяется ~
он не работает, если пользователь проходит что-то вроде ~/Downloads
в качестве места назначения.
Как я могу решить это в кросс-платформенном режиме?
Спасибо, я не знал, что оболочка делает это. – lukad
@jnml, я бы сказал, что первая одинарная цитата в строке формата неуместна и вместо этого должна быть справа перед ''% q' заполнителем для чтения 'fmt.Sprintf (" some-binary '% q' ", someArg)' – kostix
@ kostix: Я так не думаю. Значение, возвращаемое Sprintf в приведенном выше примере, должно быть '' some-binary '/ home/login/foo "''. Не тестировал его, возможно, внешние одиночные кавычки должны быть фактически удалены. Однако они верны в командной строке. – zzzz