当前位置: 首页 > 科技观察

Go1.17新特性:GoGet变了

时间:2023-03-14 15:35:54 科技观察

大家好,我是polarisxu。为什么要针对Go的一些小变化单独写一篇文章,而不是在一篇文章中介绍所有的变化?主要是为了让大家对某个功能有更深的记忆。都一一列举,很容易一眼就过去,过一会儿就忘记了。但是在一篇文章中介绍的更改更容易记住。01安装命令会提示goget已经被用于下载安装Go包、命令等,而goinstall在模块时代已经很少使用了。在GOPATH时代,goinstall是用来编译安装本地项目的。从1.16开始,官方说goget不能用来下载安装命令(也就是执行程序),只是这么说,还是可以用的。但是从Go1.17开始,如果使用goget安装命令,会提示:$gogetgithub.com/github/hubgoget:installingexecutableswith'goget'inmodulemodeisdeprecated.Toadjustanddownloaddependenciesofthecurrentmodule,use'goget-d'.Toinstallusingrequirementsofthecurrentmodule,use'goinstall'.Toinstallignoringusethecurrentmodule'goinstall'withaversion,like'goinstallexample.com/cmd@latest'。有关详细信息,请参阅https://golang.org/doc/go-get-install-deprecation或运行“gohelpget”或“gohelpinstall”。即gogetonly下载普通包和安装可执行程序,应该使用goinstall。$goinstallgithub.com/github/hub这将在$GOBIN下安装集线器命令。此外,goget有一个标志-d,指示goget下载相应的包,但不编译安装。在未来的版本中,-d将成为默认行为,这会更快。另外,由于不编译,即使target依赖特定平台编译报错,goget也能正常执行。至于为什么使用goinstall而不是goget来执行命令安装,这里有详细的解释:https://docs.studygolang.com/doc/go-get-install-deprecation,总之更符合命令的语义。告诉大家一个参与开源项目的机会:如果一个项目提供了如何安装可执行文件的方法,多半是用goget,你可以提交一个PR,改成goinstall,哈哈哈~02Abandoned-的flaginsecuregoget可能不会被很多人使用。什么时候用?Go1.16版本解释了这个标志:-insecure标志允许使用不安全的方案(如HTTP)从存储库中获取和解析自定义域,还可以使用校验和数据库绕过模块和验证。谨慎使用。此标志已弃用,将在未来的go版本中删除。要允许使用不安全的方案,请改用GOINSECURE环境变量。要绕过模块总和验证,请使用GOPRIVATE或GONOSUMDB。详见'gohelpenvironment'。这个主要用于处理不提供HTTPS的私有仓库,同时避免数据库checksum检查。但是,更推荐使用GOINSECURE环境变量。看一下这个环境变量的描述:GOINSECURE逗号分隔的glob模式列表(在Go的path.Match语法中)应该始终以不安全的方式获取的模块路径前缀。仅适用于直接获取的依赖项。与'goget'上的-insecure标志不同,GOINSECURE不会禁用校验和数据库验证。可以使用GOPRIVATE或GONOSUMDB来实现这一点。Go1.17直接丢弃了-insecure标志,必须使用GOINSECURE环境变量。但是这个环境变量不会禁用数据库校验和检查。因此,对于私有仓库,如果不提供HTTPS,则应配置GOINSECURE,指明哪些地址开启INSECURE模式,同时配置GOPRIVATE环境变量,避免数据库checksum检查。$goget-insecuregithub.com/labstack/echo/v4goget:-insecureflagisnolongersupported;useGOINSECUREinstead03总结建议大家实际尝试goget命令,切换不同的Go版本看看效果加深印象。如果你对此有任何疑问,可以通过go命令的帮助找到它。比如查看具体环境变量的含义,可以使用gohelpenvironment查看Go提供的所有环境变量。