Получить имя группы из SID

#go #winapi

#Вперед #winapi

Вопрос:

Я хочу использовать LookupGroupId функцию в os/user с этим определением :

 func LookupGroupId(gid string) (*Group, error) {
    return lookupGroupId(gid)
}
  

и вот lookupGroupId определение:

 func lookupGroupId(gid string) (*Group, error) {
    sid, err := syscall.StringToSid(gid)
    if err != nil {
        return nil, err
    }
    groupname, _, t, err := sid.LookupAccount("")
    if err != nil {
        return nil, err
    }
    if t != syscall.SidTypeGroup amp;amp; t != syscall.SidTypeWellKnownGroup amp;amp; t != syscall.SidTypeAlias {
        return nil, fmt.Errorf("lookupGroupId: should be group account type, not %d", t)
    }
    return amp;Group{Name: groupname, Gid: gid}, nil
}
  

и я хочу запустить поиск, а затем сохранить имя и SID в переменной, которая будет переменной типа Group , как показано ниже:

 var userGroup = user.Group{Gid: "", Name: ""}
  

Уже пробовал это, но ничего не происходит. Похоже, приложение даже не сохранит его нигде.

 user.LookupGroupId("S-1-5-32-545") // Users group SID
  

Какую часть я делаю неправильно? Я уже пробовал этот код:

 userGroup, _ = user.LookupGroupId("S-1-5-32-545")
  

Но я получаю эту ошибку:
cannot assign *user.Group to userGroup (type user.Group) in multiple assignment

Ответ №1:

Ошибка указывает на то, что вы повторно вводите две переменные, но для ее захвата используется только одна переменная.

Вы могли бы попробовать так и посмотреть, работает ли это

 userGroup, _ := user.LookupGroupId("S-1-5-32-545")
  

Комментарии:

1. Теперь я получаю это, я исправил ошибку 2 переменных, кстати. cannot assign *user.Group to userGroup (type user.Group) in multiple assignment

2. вам не нужно иметь переменную UserGroup = user . Group{Gid: «», Name: «»}, вместо этого попробуйте это, как a, b := user. LookupGroupId(«S-1-5-32-545») и попробуйте напечатать .Gid и a.Name

3. Я уже устал от этого, userGroup, err := user.LookupGroupId("S-1-5-32-545") но получил эту ошибку panic: runtime error: invalid memory address or nil pointer dereference . После использования вашего кода я больше не получаю эту ошибку. Можете ли вы объяснить, почему, если вы знаете?

4. Я предполагаю, что вы, должно быть, объявили UserGroup как указатель и не инициализировали его, хотя вопрос о коде мне кажется нормальным.