终极攻略!go get命令使用教程

简介: 终极攻略!go get命令使用教程

1. go get 命令简介

go get 命令用于下载并安装 Go 语言包,它会自动解析导入路径,找到对应的代码库地址,利用 git/hg/svn 等版本控制工具将代码下载并安装到 GOPATH/src 目录。


import "github.com/gin-gonic/gin"

运行 go get github.com/gin-gonic/gin 会自动安装 gin 框架。

命令格式

go get [-d] [-t] [-u] [build flags] [packages]

常用参数说明:

-d:只下载,不安装

-t:同时下载需要为运行测试所需要的包

-u:更新本地已有的包到最新版本

[build flags]:编译参数,用于指定平台、版本等信息

[packages]:自动解析导入路径,安装指定的包

工作原理

go get 命令会自动解析导入路径,找到对应的 git/hg/svn 代码仓库地址,利用版本控制工具将代码下载到GOPATH/src 目录,然后进行自动编译安装。

以安装 gin 为例,会执行以下步骤:

github.com/gin-gonic/gin 转化为 github.com/gin-gonic/gin 代码仓库地址

使用 git 克隆 github.com/gin-gonic/gin 仓库到 GOPATH/src 目录

对下载的代码进行编译安装

将安装信息写入依赖管理文件 go.mod

所以使用 go get 前需要确保环境中已经安装好 git/hg/svn 等工具。


 

2. go get 命令详解

go get 命令功能强大,提供了丰富的功能来安装 Go 语言包。

2.1 下载最新版本代码

直接使用 go get 包路径 会下载最新的 master/trunk 分支代码


$ go get github.com/gin-gonic/gin

这就获取了 gin 框架最新的开发版本。

2.2 下载指定版本代码

使用 @版本号 可以下载指定版本代码


$ go get github.com/gin-gonic/gin@v1.8.1

这会下载 v1.8.1 版本的 gin。

也可以使用 commit id


$ go get github.com/gin-gonic/gin@e2212d88b18a

commit id 需要在仓库提交记录中查找。

2.3 更新已安装的包

对于已安装的包,使用 -u 参数可以将其更新到最新版本


$ go get -u github.com/gin-gonic/gin

这会将本地 gin 包更新到最新的 master/trunk 代码。

2.4 安装私有仓库的包

有时候会将代码仓库托管在私有 Gitlab/SVN 等仓库,这时直接使用导入路径是不行的,需要指定仓库地址


$ go get gitlab.com/orgname/reponame$ go get svn.internal.com/svn/proj/trunk

注意不同的版本控制工具使用的协议和地址格式有所差异。

2.5 将依赖下载到 vendor 目录

默认情况下, go get 只会下载目标包的代码,而不会下载其依赖。

使用 -v 参数可以在下载包的同时也下载其依赖:


$ go get -v github.com/gin-gonic/gin

这会将 gin 及其所有依赖也下载下来,存储在 vendor 目录中。

2.6 避免自动安装推荐的包

有些包代码中会通过注释的方式推荐用户安装其他相关包,使用 -d 参数可以避免这种自动安装


$ go get -d github.com/gin-gonic/gin

这就只下载 gin 包,而不会下载其推荐的其他包。


 

3. go get 命令的常见用法

go get 命令功能强大,在团队项目开发中有很多常见用法。

3.1 初始化新项目

利用 go get 可以一步初始化新项目


$ mkdir myapp$ cd myapp$ go mod init github.com/mouday/myapp$ go get github.com/gin-gonic/gin$ tree.├── go.mod└── src    └── github.com        └── mouday            └── myapp

这就创建了一个依赖 gin 的新项目。

3.2 安装依赖包

在代码中导入需要的包后,可通过 go get 安装依赖


import (    "github.com/gin-gonic/gin"    "github.com/go-sql-driver/mysql")
$ go get

这会自动解析导入路径,安装这两个依赖包。

3.3 更新依赖包

利用 -u 参数可以轻松更新所有依赖包


$ go get -u

这可以避免依赖包版本过旧带来的问题。

3.4 跨平台编译

指定平台参数,可以编译出适用于不同平台的执行文件


$ go get -v -ldflags "-s -w" \     github.com/go-sql-driver/mysql

常见的平台值包括: linux , windows , darwin 等。

3.5 指定代理镜像

有时候需要通过代理来下载依赖包


$ go env -w GOPROXY=https://goproxy.cn$ go get github.com/gin-gonic/gin

这会通过 goproxy.cn 代理镜像来下载 gin 包。


 

4. go get 遇到的问题及解决方法

在使用 go get 时也可能碰到一些问题,主要包括

4.1 网络代理及 VPN 导致的下载失败

有时候在公司网络环境下,由于代理或 VPN 的影响,会导致 go get 无法正常工作。

这时可以通过如下办法解决:


$ go env -w GOPROXY=https://goproxy.cn$ go env -w GOSUMDB=off

使用国内代理镜像,并关闭校验和数据库。

4.2 git 仓库访问失败

github 上的仓库访问会失败


package github.com/gin-gonic/gin: 
unrecognized import path "github.com/gin-gonic/gin"

这是因为无法访问到 git 仓库,需要确保网络畅通或者使用代理。

4.3 SSH keys 配置错误

访问私有 git 仓库有时候需要基于 SSH 协议和密钥认证


go get gitlab.company.com/pkg/tools# ERROR: repository access denied

这时需要确认 ~/.ssh 目录下有对应的私钥配置,并添加到 SSH agent 中。

4.4 vendor 目录冲突

若项目中已经存在 vendor 目录,再次 go get 时会提示冲突


go get: vendor/cache/download failed: rename [...]: file exists

需要先删除 vendor 目录,或者使用 -mod=readonly 参数来避免更新 vendor。


 

5. 总结

go get 命令在 Go 语言开发中非常重要,有效利用可以提高效率。

go get 工具简化了依赖管理,可以通过简单一条语句完成包的下载和安装。这对团队协作非常重要。

go get 需要依赖 go modules 来记录依赖关系,进行版本选择等。所以要充分结合使用。

Go 语言生态正在快速发展, go get 命令也在不断优化和完善,相信会变得越来越好用。

目录
相关文章
|
Shell Go
Go 语言入门很简单:Go 语言执行 Shell 命令(下)
Exec 是 os 包中的一个子包,它可用于使用 Go 运行外部命令。Go exec 命令教程展示了如何在 Golang 中执行 shell 命令和程序。
|
19天前
|
存储 测试技术 Go
掌握Go语言:深入探究Go语言中的命令源码文件与参数处理技巧(3)
掌握Go语言:深入探究Go语言中的命令源码文件与参数处理技巧(3)
|
3月前
|
测试技术 Go 开发者
掌握 go test 命令,写出可信赖的代码
掌握 go test 命令,写出可信赖的代码
51 0
|
3月前
|
Go 开发者
代码整洁利器:go fmt命令详解
代码整洁利器:go fmt命令详解
67 0
|
3月前
|
编译器 Go 开发者
go run 命令核心技术详解
go run 命令核心技术详解
98 0
|
3月前
|
安全 Go 开发工具
go clean命令 完全解析
go clean命令 完全解析
117 0
|
4月前
|
Java 编译器 Go
百度搜索:蓝易云【Go的执行原理以及Go的命令】
这些命令为Go开发者提供了便利的开发、编译、运行、测试和文档查阅等功能,使得Go语言在开发过程中更加高效和便捷。
36 1
|
5月前
|
小程序 测试技术 Go
Go命令大全:全面解析与实践
Go命令大全:全面解析与实践
54 0
|
9月前
|
网络安全 Go Cloud Native
SSH连接服务器后执行多条命令 |Go主题月
大家平时有没有遇到自己连接云服务器,ssh 连接上去之后,发现自己的一些小工具用不了 例如go build无法使用 ,由于我们安装配置golang 环境的时候,是在文件/etc/profile中写了配置,因此需要source 一下/etc/profile
119 0
SSH连接服务器后执行多条命令 |Go主题月
|
10月前
|
Kubernetes Go 数据安全/隐私保护
两个生僻小命令---go mod why和go mod graph
两个生僻小命令---go mod why和go mod graph
302 0

热门文章

最新文章