• 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
  • 相关阅读:
    Let‘s Encrypt && acme
    人工智能数学课高等数学线性微积分数学教程笔记(3. 线性代数基础)
    【JVM】运行时数据区 - 虚拟机栈(Java栈)
    递归排列枚举2(c++)
    2022年湖南成人高考准考证打印时间和方法
    OpenCV17-图像形态学操作
    react-redux action传参 多个state处理
    如何写出同事看不懂的Java代码?
    欧拉函数
    python示例
  • 原文地址:https://blog.csdn.net/qq_14829643/article/details/136200227