• go: 如何获取linux用户的uid和gid


    获取当前用户的信息

    在Go中,我们可以使用os/user包来获取Linux用户的ID和组ID。以下是一个简单的示例:

    package main
    
    import (
    	"fmt"
    	"os/user"
    )
    
    func main() {
    	// 获取当前用户
    	currentUser, err := user.Current()
    	if err != nil {
    		panic(err)
    	}
    
    	// 打印用户ID和组ID
    	fmt.Println("User ID:", currentUser.Uid)
    	fmt.Println("Group ID:", currentUser.Gid)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    这段代码首先调用user.Current()函数来获取当前用户的信息,然后打印出用户ID (Uid) 和组ID (Gid)。如果在获取用户信息时发生错误,程序会抛出panic。

    注意: 如果普通用户使用sudo执行程序,程序内的当前用户是root

    当我们使用sudo执行程序时,程序内的当前用户将是root,而不是普通用户。这是因为sudo命令的作用就是以超级用户(root)的身份运行命令。

    获取指定用户的信息

    在Go中,我们可以使用os/user包的Lookup函数来获取指定用户名的用户信息,包括用户ID和组ID。以下是一个简单的示例:

    package main
    
    import (
    	"fmt"
    	"os/user"
    )
    
    func main() {
    	// 指定用户名
    	username := "your_username"
    
    	// 获取用户信息
    	userInfo, err := user.Lookup(username)
    	if err != nil {
    		panic(err)
    	}
    
    	// 打印用户ID和组ID
    	fmt.Println("User ID:", userInfo.Uid)
    	fmt.Println("Group ID:", userInfo.Gid)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    这段代码首先调用user.Lookup函数来获取指定用户名的用户信息,然后打印出用户ID (Uid) 和组ID (Gid)。如果在获取用户信息时发生错误,程序会抛出panic。

    把字符串转为int

    在这里插入图片描述

    在Go中,os/user库中User的Uid和Gid是字符串数字,我们可以使用strconv.Atoi函数将数字字符串转换为int类型。如果我们需要将字符串转换为int64类型,可以使用strconv.ParseInt函数。以下是两个函数的使用示例:

    package main
    
    import (
    	"fmt"
    	"strconv"
    )
    
    func main() {
    	// 将数字字符串转换为int类型
    	numStr := "123"
    	num, err := strconv.Atoi(numStr)
    	if err != nil {
    		fmt.Println(err)
    	} else {
    		fmt.Println(num)
    	}
    
    	// 将数字字符串转换为int64类型
    	numStr64 := "1234567890123456789"
    	num64, err := strconv.ParseInt(numStr64, 10, 64)
    	if err != nil {
    		fmt.Println(err)
    	} else {
    		fmt.Println(num64)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    第五天 脚本与UI系统
    文心一言 VS 讯飞星火 VS chatgpt (116)-- 算法导论10.3 1题
    《程序员修炼之道》读书笔记
    Linux下rocketmq异步主从搭建
    C# 实现 Linux 视频聊天、远程桌面(源码,支持信创国产化环境,银河麒麟,统信UOS)
    基于 SpringBoot+Vue 的企业人事管理系统
    从零玩转系列之微信支付开篇
    Luogu U238811 小 P 的数学题
    git原理浅析
    Google浏览器插件推荐
  • 原文地址:https://blog.csdn.net/qq_14829643/article/details/136200227