Golang 安装第三方包
最近帮一个朋友安装golang的环境,本以为以一个老司机的我,应该很快就能解决,结果是花了一个多小时,发现自己对go安装的原理不是很理解,认真复习一番,做一个总结:
golang安装第三方的前提
必须设置GOPATH
-
linux
vim /etc/profile export GOROOT=/usr/local/go // 设置为你自己的go安装目录 export GOPATH=$HOME/gocode // 设置为自己的go项目的工作区间 export PATH=$PATH:$GOROOT/bin:$GOPATH/bin // 原路径后用冒号连接新路径 source /etc/profile // 使文件立刻生效
-
mac
cd ~ vim .bash_profile export GOROOT=/usr/local/opt/go\@1.9/libexec //golang安装路径 export GOPATH=/usr/local/Cellar/go/1.7.6 // 工作路径 export GOBIN=$GOPATH/bin // 可执行文件 export PATH=$PATH:$GOROOT/bin:$GOBIN // path导入路径 source ~/.bash_profile // 使文件立刻生效
-
window : GOPATH,额外 安装git
其实linux和mac系统也需要git,不过这两者都默认拥有git。而windows是需要自主安装的
去git官网下载git并安装
-
再设置GOPATH:
右键我的电脑——高级系统设置——环境变量,系统变量下 点击【新建】
输入: 第1行:GOPATH 第2行:你指定路径,例如: D:\go\gopath (注意去掉末尾的分号)
golang安装第三包的方式
-
自动安装:通过
go get xxx
命令来安装这条命令会把远端的第三方包下载并解压到你的
GOPATH
路径下的src文件夹
里面去,并执行go install xxx
命令来安装该包,结果是在GOPATH
路径的pkg文件夹
生成xxx.a
文件- 实际上
go get
就是git clone
+go install
的组合 - 由上面可知, windows在调用
go get
之时使用到了git
,所以必须先安装安装git
- 实际上
-
手动安装:
-
先下载该包,并按照该包官方的下载路径 为该包创建对应的
gopath/src
下里面的路径,注意这一步很关键!第三包在src里的路径不能随意放在一个文件夹中,因为第三方包内部的文件里还有对其它包的引用,如果随意放置会导致导入路径失效。
将包移入到该路径,执行
go install
命令安装这个文件
-
go get的一些使用细节
添加-x
参数:打印安装的具体过程,(golang安装遵循的是linux的哲学,没有消息就是最好的消息,所有默认是没有任何提示的)
添加-d
参数:只下载代码包到src目录下,不编译和安装
添加-u
参数:该命令利用网络来更新已有代码包及其依赖包。默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包。
添加-f
参数:仅在使用-u
标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里Fork过来的,那么这样做就尤为重要了。
添加-fix
参数:修复因Go语言规范变更而造成的语法级别的错误
添加-t
参数:让命令额外下载代码包中测试源码文件中依赖的代码包
添加-insecure
参数:允许命令程序使用非安全的scheme(如HTTP)去下载指定的代码包。如果你用的代码仓库(如公司内部的Gitlab)没有HTTPS支持,可以添加此标记。请在确定安全的情况下使用它。
标记名称 | 标记描述 |
---|---|
-x | 打印安装的具体过程 |
-d | 让命令程序只执行下载动作,而不执行安装动作。 |
-u | 让命令利用网络来更新已有代码包及其依赖包。默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包。 |
-f | 仅在使用-u 标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里Fork过来的,那么这样做就尤为重要了。 |
-fix | 让命令程序在下载代码包后先执行修正动作,而后再进行编译和安装。 |
-t | 让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包。 |
-insecure | 允许命令程序使用非安全的scheme(如HTTP)去下载指定的代码包。如果你用的代码仓库(如公司内部的Gitlab)没有HTTPS支持,可以添加此标记。请在确定安全的情况下使用它。 |
有疑问加站长微信联系(非本文作者)