[Go] gocron源码阅读-判断是否使用root用户执行
程序员文章站
2022-06-11 16:57:22
判断是linux系统,并且uid为0,allowRoot是通过命令行传参传进来的,通过flag包解析出来的,可以使用go run node.go -h看到这些参数 log.Fatal传入的是一个可变参数v ...interface{},并且可以传入任意类型,可变参数的使用和切片很像 如果要真的传入一 ......
判断是linux系统,并且uid为0,allowroot是通过命令行传参传进来的,通过flag包解析出来的,可以使用go run node.go -h看到这些参数
if runtime.goos != "windows" && os.getuid() == 0 && !allowroot { log.fatal("do not run gocron-node as root user") return }
log.fatal传入的是一个可变参数v ...interface{},并且可以传入任意类型,可变参数的使用和切片很像
如果要真的传入一个切片,那么切片类型要和参数类型一致
nums := []int{1, 2, 3, 4, 5} fatal2(nums...) func fatal2(args ...int) { for _, arg := range args { fmt.println(arg) } }
完整代码:
package main import ( "fmt" "log" "os" "runtime" ) func main() { //可变参数 fatal("hello", 1) //如果要传切片,切片类型要和参数类型一致 nums := []int{1, 2, 3, 4, 5} fatal2(nums...) host, _ := os.hostname() //获取当前目录 wd, _ := os.getwd() fmt.println( host, wd, //获取用户id os.getuid(), //获取有效用户id os.geteuid(), //获取组id os.getgid(), //获取有效组id os.getegid(), //获取进程id os.getpid(), //获取父进程id os.getppid(), //获取环境变量的值 os.getenv("gopath"), //设置环境变量的值 os.setenv("my_name", "taoshihan"), //改变当前工作目录 os.chdir("/home/")) if runtime.goos != "windows" && os.getuid() == 0 { log.fatal("do not run gocron-node as root user") return } } func fatal(args ...interface{}) { for _, arg := range args { fmt.println(arg) } } func fatal2(args ...int) { for _, arg := range args { fmt.println(arg) } }
上一篇: C++程序崩溃解决方案