
理解go get命令的工作机制
go get是go语言中一个非常强大的命令,它用于下载、编译并安装go包及其依赖。当您执行go get命令时,go工具链会执行以下操作:
- 下载源代码: 从指定的版本控制系统(如Git、Mercurial等)下载目标包的源代码到您的GOPATH目录下的src子目录中。
- 解析依赖: 递归地下载所有依赖包的源代码。
- 编译安装: 编译源代码,并根据包类型将其安装到相应的目录。对于包含main函数的包,它会生成一个可执行文件。
一个常见的困惑是,当go get命令成功执行时,它通常不会输出任何信息。这种“沉默即成功”的设计是Go工具链的特点之一,它旨在减少不必要的日志输出,让用户专注于错误信息。因此,即使没有看到任何输出,也并不意味着命令失败,很可能它已经成功完成了任务。
定位go get生成的可执行文件
go get命令生成的可执行文件会根据您的Go环境配置,放置在特定的bin目录下。理解这些目录的优先级和作用至关重要。
Go工具链查找可执行文件的顺序如下:
- GOBIN环境变量: 如果您显式设置了GOBIN环境变量,那么所有通过go install或go get安装的可执行文件都将被放置到该目录。这是最高优先级的设置。
- GOPATH/bin目录: 如果GOBIN未设置,Go会查找您的GOPATH环境变量。GOPATH可以包含一个或多个路径,每个路径下都应该有一个bin子目录。可执行文件通常会被安装到GOPATH列表中的第一个路径的bin子目录中。
- GOROOT/bin目录: 如果上述两个路径都未能提供可执行文件的安装位置,在某些旧版本或特定配置下,Go可能会将一些核心工具的可执行文件放置在GOROOT目录下的bin子目录中。然而,对于通过go get下载的第三方工具,此位置通常不作为首选。
为了准确找到go-tour(或其他任何通过go get安装的工具)的可执行文件,您应该首先检查您的Go环境变量。
立即学习“go语言免费学习笔记(深入)”;
步骤一:检查Go环境变量
打开您的终端或命令行界面,执行以下命令来查看当前的Go环境配置:
go env
该命令会输出一系列Go相关的环境变量,其中最关键的是GOROOT、GOPATH和GOBIN。
示例输出(可能与您的环境不同):
GOROOT="/usr/local/go" GOBIN="" GOARCH="amd64" GOOS="linux" GOPATH="/home/user/go" # ... 其他环境变量
从上面的示例中,我们可以看到:
- GOROOT指向Go语言的安装根目录。
- GOBIN为空,这意味着没有显式设置可执行文件的安装目录。
- GOPATH指向/home/user/go,这是用户的工作空间。
步骤二:定位可执行文件
根据go env的输出,我们可以推断出可执行文件的可能位置。
函数是一组语句一起执行任务。在MATLAB中,函数定义在单独的文件。文件函数的文件名应该是相同的。 函数操作在自己的工作空间,它也被称为本地工作区,独立的工作区,在 MATLAB 命令提示符访问,这就是所谓的基础工作区的变量。函数可以接受多个输入参数和可能返回多个输出参数 。 MATLAB是MathWorks公司开发的一种编程语言。它最初是一个矩阵的编程语言,使线性代数编程很简单。它可以运行在交互式会话和作为批处理作业。有需要的朋友可以下载看看
-
检查GOBIN目录: 如果GOBIN有值(例如GOBIN="/path/to/my/bin"),那么您的gotour可执行文件很可能就在这个目录下。
ls $GOBIN/gotour
-
检查GOPATH/bin目录: 如果GOBIN为空,那么可执行文件通常会安装到GOPATH的第一个路径下的bin目录中。在上述示例中,GOPATH是/home/user/go,所以我们应该检查/home/user/go/bin目录。
ls $(go env GOPATH | awk -F: '{print $1}')/bin/gotour或者,如果您的GOPATH只有一个路径,可以直接:
ls $GOPATH/bin/gotour
如果文件存在,您就可以直接运行它:
$GOPATH/bin/gotour
为了方便,您可以将$GOPATH/bin添加到您的系统PATH环境变量中,这样就可以直接通过gotour命令来运行。
-
检查GOROOT/bin目录(通常不适用于go get的第三方工具): 尽管不常见,但作为排查的最后一步,您可以检查GOROOT下的bin目录。
ls $GOROOT/bin/gotour
示例:启动go-tour
假设您的GOPATH设置为/home/user/go,并且GOBIN为空。
- 执行go get code.google.com/p/go-tour/gotour。
- 命令成功执行,但无输出。
- 检查$GOPATH/bin目录:
ls /home/user/go/bin
您应该会看到gotour这个可执行文件。
- 运行go-tour:
/home/user/go/bin/gotour
或者,如果您已将$GOPATH/bin添加到PATH,可以直接运行:
gotour
注意事项与最佳实践
- GOPATH的重要性: 强烈建议您始终设置GOPATH。它是Go工作区的基础,所有通过go get下载的包和编译的可执行文件都将与此路径关联。
-
GOBIN的使用: 如果您希望将所有Go可执行文件集中管理在特定目录,例如/usr/local/bin或~/bin,可以设置GOBIN环境变量。这有助于保持GOPATH的整洁,并方便将这些工具添加到系统PATH中。
export GOBIN="/usr/local/go/bin" # 或其他您希望的路径
请注意,设置后,您需要将$GOBIN添加到您的系统PATH环境变量中。
-
将bin目录添加到PATH: 为了方便在任何位置直接运行Go工具,务必将$GOPATH/bin(或$GOBIN,如果已设置)添加到您的系统PATH环境变量中。这通常通过修改~/.bashrc、~/.zshrc或~/.profile文件来完成。
# 在您的shell配置文件中添加 export PATH=$PATH:$(go env GOPATH | awk -F: '{print $1}')/bin # 或者如果设置了GOBIN # export PATH=$PATH:$GOBIN修改后,记得source您的配置文件或重新启动终端。
总结
go get命令的“沉默即成功”特性可能让初学者感到困惑,但只要理解了Go工具链查找和安装可执行文件的逻辑,就能轻松定位它们。关键在于检查GOBIN和GOPATH环境变量,并知道它们对应的bin目录是可执行文件的默认存放位置。通过合理配置这些环境变量,并将其添加到系统PATH中,您可以极大地提升Go开发和工具使用的效率。









