kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Paul Ruane
Paul Ruane
Вопрос

Получить домашний каталог пользователя

Ниже приведен лучший способ получения домашнего каталога работающего пользователя? Или есть определенная функция, которую я разработал?

os.Getenv("HOME")

Если вышеизложенное правильно, кто-нибудь знает, гарантированно ли этот подход работает на платформах, не относящихся к Linux, например,. Windows?

80 2011-10-27T20:54:35+00:00 7
 lospejos
lospejos
Редактировал вопрос 3-го октября 2018 в 1:14
Программирование
go
home-directory
Решение / Ответ
Vlad Didenko
Vlad Didenko
22-го октября 2012 в 3:50
2012-10-22T03:50:44+00:00
Дополнительно
Источник
Редактировать
#13687439

В go 1.0.3 (вероятно, раньше тоже) выполняются следующие работы:

package main
import (
    "os/user"
    "fmt"
    "log"
)
func main() {
    usr, err := user.Current()
    if err != nil {
        log.Fatal( err )
    }
    fmt.Println( usr.HomeDir )
}

Если важно сопоставить, рассмотрите библиотеку homedir

Vlad Didenko
Vlad Didenko
Редактировал ответ 27-го августа 2014 в 4:47
159
0
 CoolAJ86
CoolAJ86
3-го апреля 2019 в 9:15
2019-04-03T09:15:18+00:00
Дополнительно
Источник
Редактировать
#13687443

os.UserHomeDir ()

В go1.12 + вы можете использовать os.UserHomeDir ()

home, err := os.UserHomeDir()

См. https://golang.org/pkg/os/#UserHomeDir

Это должно работать даже без включенной CGO (т.е. FROM scrut) и без необходимости анализировать / etc / passwd или другую подобную ерунду.

 CoolAJ86
CoolAJ86
Редактировал ответ 3-го апреля 2019 в 9:26
25
0
 peterSO
peterSO
27-го октября 2011 в 10:01
2011-10-27T22:01:23+00:00
Дополнительно
Источник
Редактировать
#13687438

Например,

package main

import (
    "fmt"
    "os"
    "runtime"
)

func UserHomeDir() string {
    if runtime.GOOS == "windows" {
        home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
        if home == "" {
            home = os.Getenv("USERPROFILE")
        }
        return home
    }
    return os.Getenv("HOME")
}

func main() {
    dir := UserHomeDir()
    fmt.Println(dir)
}
 peterSO
peterSO
Редактировал ответ 28-го октября 2011 в 1:25
20
0
Murphy Randle
Murphy Randle
3-го октября 2013 в 6:27
2013-10-03T18:27:45+00:00
Дополнительно
Источник
Редактировать
#13687440

Вот хороший, краткий способ сделать это (если вы работаете только в системе на основе UNIX):

import (
  "os"
)

var home string = os.Getenv("HOME")

Это просто запрашивает переменную среды $ HOME.

--- Редактировать ---

Теперь я вижу, что этот же метод был предложен выше. Я оставлю этот пример здесь в виде дистиллированного раствора.

4
0
 hnakamur
hnakamur
22-го января 2017 в 1:34
2017-01-22T01:34:04+00:00
Дополнительно
Источник
Редактировать
#13687441

go1.8rc2 имеет функцию go / build / defaultGOPATH, которая получает домашний каталог. https://github.com/golang/go/blob/go1.8rc2/src/go/build/build.go#L260-L277

Следующий код извлекается из функции GOPATH по умолчанию.

package main

import (
    "fmt"
    "os"
    "runtime"
)

func UserHomeDir() string {
    env := "HOME"
    if runtime.GOOS == "windows" {
        env = "USERPROFILE"
    } else if runtime.GOOS == "plan9" {
        env = "home"
    }
    return os.Getenv(env)
}

func main() {
    dir := UserHomeDir()
    fmt.Println(dir)
}
2
0
Miguel Mota
Miguel Mota
6-го июля 2018 в 9:19
2018-07-06T21:19:19+00:00
Дополнительно
Источник
Редактировать
#13687442

Аналогичный ответ @peterSO, но уважает путь XDG_CONFIG_HOME для linux.

package main

import (
    "fmt"
    "os"
    "runtime"
)

func userHomeDir() string {
    if runtime.GOOS == "windows" {
        home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
        if home == "" {
            home = os.Getenv("USERPROFILE")
        }
        return home
    } else if runtime.GOOS == "linux" {
        home := os.Getenv("XDG_CONFIG_HOME")
        if home != "" {
            return home
        }
    }
    return os.Getenv("HOME")
}

func main() {
    fmt.Println(userHomeDir())
}
2
0
Jeremy  W. Sherman
Jeremy W. Sherman
27-го октября 2011 в 9:06
2011-10-27T21:06:41+00:00
Дополнительно
Источник
Редактировать
#13687437

Вы должны использовать переменную среды USERPROFILE или HOMEPATH под Windows. См. Признанные переменные среды (будет приветствоваться более подробная ссылка на документацию по apropos).

2
0
Похожие сообщества 9
Go-go!
Go-go!
7 162 пользователей
Thx @madgopher за лого! Флуд: @gogo_flood #book – книги #link – ccылки 🙅‍♀️: - оскорбления - nsfw контент - флуд, флейм и спам - избыток оффтоп тем - бесить людей Все мы были новичками. Вакансии: @gogetajob Главный стрелочник: @alek_si
Открыть telegram
Go Get A Job
Go Get A Job
3 591 пользователей
Филиал @gogolang Флудилка - https://t.me/+I6Q2M70UxdMyZDNi Предназначен для публикации вакансий, связанных с языком Go AKA Golang Правила постинга — в закреплённом сообщении Канал с вакансиями без общения @gogetajobfeed Тираны чатика те же :)
Открыть telegram
GOLANG Чат
GOLANG Чат
1 406 пользователей
Сообщество Go Программистов 🔴 Канал: @golang_org 🔴 Сайт: golangs.org 🔴 Форум: itfy.org Контакты: @python_user
Открыть telegram
Golang Jobs and Freelance
Golang Jobs and Freelance
1 123 пользователей
Discuss jobs and freelance for golang developers. If you have a job ad please contact @golangjob channel's admin. Вакансии в группе размещаются только через канал @golangjob. Все остальные будут удалены. Это делается в интересах соискателей.
Открыть telegram
Golang Telegram Bot API
Golang Telegram Bot API
1 119 пользователей
Discussion about the go-telegram-bot-api library. Please try to stay on topic. https://github.com/go-telegram-bot-api/telegram-bot-api https://go-telegram-bot-api.dev
Открыть telegram
Golang — вакансии и аналитика
987 пользователей
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Роман Азаров
Зарегистрирован 3 дня назад
2
Mansur Zakirov
Зарегистрирован 6 дней назад
3
Тагир Мамедов
Зарегистрирован 1 неделю назад
4
Алексей Толманов
Зарегистрирован 1 неделю назад
5
Valeriu Vodnicear
Зарегистрирован 2 недели назад
ID
JA
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией