#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 как указатель и не инициализировали его, хотя вопрос о коде мне кажется нормальным.