Функция os.Getgid
Функция os.Getgid возвращает целочисленный идентификатор группы (GID) текущего процесса.
Этот идентификатор используется операционной системой для определения прав доступа процесса
к файлам и другим ресурсам. Функция не принимает никаких параметров и всегда возвращает
значение типа int. Важно отметить, что функция доступна только в Unix-подобных
системах и не поддерживается в Windows.
Синтаксис
os.Getgid()
Пример
Давайте получим идентификатор группы текущего процесса и выведем его на экран:
package main
import (
"fmt"
"os"
)
func main() {
gid := os.Getgid()
fmt.Println("Group ID:", gid)
}
Результат выполнения кода:
"Group ID: 1000"
Пример с проверкой прав доступа
Давайте используем идентификатор группы для проверки прав доступа к файлу. В этом примере мы сравниваем GID текущего процесса с владельцем группы файла:
package main
import (
"fmt"
"os"
"os/user"
)
func main() {
// Получаем GID текущего процесса
gid := os.Getgid()
// Получаем информацию о текущем пользователе
currentUser, err := user.Current()
if err != nil {
fmt.Println("Error getting user info:", err)
return
}
// Получаем информацию о группе пользователя
group, err := user.LookupGroupId(currentUser.Gid)
if err != nil {
fmt.Println("Error getting group info:", err)
return
}
fmt.Printf("Process GID: %d\n", gid)
fmt.Printf("User's primary group: %s (%s)\n", group.Name, group.Gid)
}
Результат выполнения кода:
"Process GID: 1000"
"User's primary group: users (1000)"
Пример с проверкой дополнительных групп
Давайте получим список всех групп, к которым принадлежит текущий пользователь, и проверим, входит ли в них основной GID процесса:
package main
import (
"fmt"
"os"
"os/user"
"strconv"
)
func main() {
// Получаем GID текущего процесса
gid := os.Getgid()
// Получаем информацию о текущем пользователе
currentUser, err := user.Current()
if err != nil {
fmt.Println("Error getting user info:", err)
return
}
// Получаем список дополнительных групп пользователя
groupIds, err := currentUser.GroupIds()
if err != nil {
fmt.Println("Error getting group IDs:", err)
return
}
fmt.Printf("Process GID: %d\n", gid)
fmt.Println("User's group memberships:")
for _, gidStr := range groupIds {
groupId, _ := strconv.Atoi(gidStr)
group, err := user.LookupGroupId(gidStr)
if err == nil {
fmt.Printf(" - Group ID %d (%s)\n", groupId, group.Name)
} else {
fmt.Printf(" - Group ID %d\n", groupId)
}
}
}
Результат выполнения кода:
"Process GID: 1000"
"User's group memberships:"
" - Group ID 1000 (users)"
" - Group ID 1001 (developers)"
" - Group ID 1002 (admin)"
Смотрите также
-
функцию
os.Getuid,
которая возвращает идентификатор пользователя текущего процесса -
функцию
os.Getpid,
которая возвращает идентификатор текущего процесса -
функцию
os.Getppid,
которая возвращает идентификатор родительского процесса -
функцию
os.Hostname,
которая возвращает имя хоста системы