Golang弃用go get工具

Python016

Golang弃用go get工具,第1张

由于golang发布了新版本1.17.1,你可能会在使用go get -u安装包时得到这个错误。

例如:在安装goose包时使用:

返回如下错误:

go get在g.mod中同时用于更新依赖和安装命令。这种组合很混乱,使用起来也很不方便,因为开发人员不想同时进行更新和安装。

随着1.17.1版本的发布不再支持go get命令。那么以后如何安装依赖包呢?

1、根据文档,如果要在当前模块的上下文中安装可执行文件时,使用go install不带版本后缀。如下所示:

这个命令适用于安装当前目录或父目录中go.mod定义的版本要求和其他命令。

2、要安装可执行文件同时忽略当前模块go.mod,使用go install带上版本后缀例如:@v1.2.3 或@latest

因此变化在于:使用install替换get,去除-u在包URL末尾添加@latest。或者对于旧版本不是最新版本情况,在包URL的末尾添加指定版本。

现在可以成功安装。

https://golang.org/doc/go-get-install-deprecation

Golang如何让子进程以另一个用户身份运行

当父进程launch一个子进程的时候,如何使得子进程使用另一个用户身份运行。

前提条件当前用户得用足够的权限切换到另一个用户,所以通常父进程是root。

下面的例子是root用户的父进程,如何launch一个子进程,并且使得子进程以nobody的身份在运行(nobody是*nix操作系统的内置账号)。

其中关键的命令就是两行

先查找到nobody用户的uid和gid,然后调用syscall.Credential对象。

注意上述的操作都需要特权,通常只有root用户才有这个权限。

golang父进程通过管道向子进程传递数据

这里例子里面父进程launch一个子进程,然后通过管道(stdin)向子进程传递文本串。

父进程:

子进程: