我曾经在windows上使用Go。我最近使用ubuntu,我是linux环境的新手。我安装使用二进制安装Go与本教程(方法#3)。但是当我像go version
一样输入go命令时,终端显示"command not found"。我只能在使用source ~/.bash_profile
之后使用go命令。如何使用Go,不初始化source ~/.bash_profile
?
有很多事情正在发生,而且没有一个与Go直接相关。
一些理论我假设你在一些"图形桌面环境"中工作。开始;也就是说,当你的电脑启动时,你会看到一个图形化的登录对话框,然后你就有了那个"桌面"。并且所有的应用程序都在单独的窗口中运行。
一个这样的窗口是"终端"。或者"控制台"。在典型的Ubuntu系统中,你按下Windows键,然后输入"终端"。打开它。实际上,它并不是一个真正启动的终端,而是一个运行命令行shell的终端仿真器,在您的示例中是bash
。
shell向您提供命令行,接受您的输入,运行命令,终端仿真器通过"托管"使其全部工作。壳。
该~/.bash_profile
文件是bash
在启动时在特定条件下读取的初始化文件之一-稍后详细介绍。
在基于linux的操作系统上(实际上在任何类unix操作系统上,以及Mac OS和Windows上),所有正在运行的进程都有环境变量的概念。环境变量有一个名称和一个值。在方法3的步骤4中调整的PATH
环境变量在您的指南中包含计算机上的目录列表,用于查找与您在shell中键入的命令的短名称匹配的文件。
因此,当您输入go version
时,您要求shell查找并运行一个名为go
的程序,并向它传递一个参数version
。由于您没有拼写该命令的完整路径名,因此shell必须在一组众所周知的位置中搜索它,而PATH
包含该集合。
环境变量的一个属性是可继承的:如果一个进程启动了另一个进程,这个新进程将继承其父进程的环境变量。
这允许在登录会话的早期设置某些环境变量——该会话是在您成功对系统进行身份验证时创建的。PATH
环境变量是早期设置的其中一个变量它包含一组目录,所有的"库存"安装操作系统自带程序
当您使用该指南安装Go时,它没有安装在任何默认的已知位置,因此当您要求shell运行go
时,shell无法找到它。
命令行shell的一个属性是它们允许很容易地操作环境变量——包括在启动脚本中设置它们。
指南中的代码片段export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
就是这样做的:修改PATH
环境变量,然后"导出"它的新值意味着它可以被shell运行的进程使用。
好了,我们差不多得出结论了;-)
当你在终端模拟器中运行shell时,从shell的角度来看,它被称为交互式非登录模式——它是交互式的,因为用户,你,将直接在其中输入命令,它是非登录的,因为它不是由管理用户登录的进程启动的。bash
shell,在这种模式下运行时,读取~/.bashrc
文件-详细说明在其手册中,它只在作为登录shell运行时读取~/.bash_profile
,这不是你的情况。
TL;博士
还是
export GOPATH=$HOME/go
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
到~/.bashrc
而不是~/.bash_profile
,并生成另一个终端窗口-它将立即工作。
这才是正确的做法。
另一种方法是直接从你解包的地方删除Go并安装你的操作系统提供的golang-go
包。它将以一种您不需要扰乱环境变量的方式安装。
讨论从官方站点或从操作系统安装的相对优点与问题无关,因此我不会离题。
如果您打算认真地在类Unix环境中开发软件,建议您找一本关于Unix的书作为工作环境并阅读。
…说到这里,这门语言叫做Go。