如何在Ubuntu 18.04上安装Go并设置本地编程环境

引言

Go是在谷歌的挫折中诞生的编程语言。开发人员不得不不断地选择一种执行效率高但需要长时间编译的语言,或者选择一种易于编程但在生产环境中运行效率低的语言。Go被设计为同时提供这三种功能:快速编译、易于编程和在生产中高效执行。

虽然Go是一种通用的编程语言,可以用于许多不同的编程项目,但它特别适合于网络/分布式系统程序,并赢得了"云语言"的声誉。它专注于帮助现代程序员使用一套强大的工具做更多的事情,通过将格式作为语言规范的一部分来消除关于格式的争论,以及通过编译为单一的二进制文件来简化部署。Go易于学习,只有很少的关键字,这使得它对于初学者和有经验的开发人员都是一个很好的选择。

本教程将指导您通过命令行安装和配置Go编程工作区。本教程将明确介绍Ubuntu 18.04的安装过程,但一般原则可以适用于其他Debian Linux发行版。

前期准备

您需要一台安装了Ubuntu 18.04的计算机或虚拟机,以及对该计算机的管理访问权限和互联网连接。您可以通过Ubuntu 18.04发布页面下载此操作系统。

第1步 - 设置Go

在此步骤中,通过从Go官方下载页面下载当前版本来安装Go。

要做到这一点,需要找到当前二进制发布版本的URL。你还需要注意它旁边列出的SHA256哈希值,因为你将使用这个哈希值来验证下载的文件。

你将在命令行中完成安装和设置,这是一种与计算机交互的非图形化方式。也就是说,你不需要点击按钮,而是需要输入文本,并通过文本从计算机接收反馈。

命令行,也被称为shell终端,可以帮助你修改和自动化你每天在计算机上执行的许多任务,是软件开发人员的重要工具。要学习许多终端命令,它们可以让你做更强大的事情。

在Ubuntu 18.04上,你可以通过点击屏幕左上角的Ubuntu图标并在搜索栏中输入terminal来找到Terminal应用程序。单击终端应用程序图标来打开它。或者,您可以同时按下键盘上的CTRLALTT键来自动打开终端应用程序。

打开终端后,您将手动安装Go二进制文件。虽然您可以使用包管理器,例如apt-get,但手动安装步骤将帮助您了解对系统的任何配置更改,这些更改是拥有有效的Go工作空间所需的。

在下载Go之前,确保你在home(~)目录下:

shell 复制代码
cd ~

使用curl获取你从官方Go下载页面tar压缩包 URL:

shell 复制代码
curl -LO https://dl.google.com/go/go1.12.1.linux-amd64.tar.gz

接下来,使用sha256sum来验证压缩包:

shell 复制代码
sha256sum go1.12.1.linux-amd64.tar.gz

运行上述命令显示的哈希值应该与下载页面上的哈希值匹配。如果没有,那么这不是一个有效的文件,你应该再次下载该文件。

shell 复制代码
Output2a3fdabf665496a0db5f41ec6af7a9b15a49fbe71a85a50ca38b1f13a103aeec  go1.12.1.linux-amd64.tar.gz

接下来,解压缩下载的存档文件并将其安装到系统上所需的位置。最佳实践是将其保存在/usr/local下:

shell 复制代码
sudo tar -xvf go1.12.1.linux-amd64.tar.gz -C /usr/local

现在在/usr/local目录下有一个名为go的目录。

注意 :虽然/usr/local/go是官方推荐的位置,但有些用户可能会喜欢或要求不同的路径。

在这一步中,你下载并在Ubuntu 18.04机器上安装了Go。在下一步中,您将配置Go工作区。

第2步 - 创建Go工作空间

现在,您可以创建您的编程工作空间,安装了Go。Go工作区在其根目录下包含两个目录:

  • src:包含Go源文件的目录。源文件是使用Go编程语言编写的文件。Go编译器使用源文件来创建可执行的二进制文件。
  • bin:包含Go工具构建和安装的可执行文件的目录。可执行文件是运行在系统上并执行任务的二进制文件。这些通常是由源代码或其他下载的Go源代码编译的程序。

src子目录可能包含多个版本控制存储库(例如GitMercurialBazaar)。这允许在你的项目中规范地导入代码。普通 导入是引用完全限定包的导入,例如github.com/digitalocean/godo

当你的程序导入第三方库时,你会看到像github.comgolang.org之类的目录。如果你使用的是像github.com这样的代码仓库,你也会将你的项目和源文件放在该目录下。我们将在这一步的后面探讨这个概念。

下面是一个典型的工作空间:

shell 复制代码
.
├── bin
│   ├── buffalo                                      # command executable
│   ├── dlv                                          # command executable
│   └── packr                                        # command executable
└── src
    └── github.com
        └── digitalocean
            └── godo
                ├── .git                            # Git repository metadata
                ├── account.go                      # package source
                ├── account_test.go                 # test source
                ├── ...
                ├── timestamp.go
                ├── timestamp_test.go
                └── util
                    ├── droplet.go
                    └── droplet_test.go

从1.8开始,Go工作区的默认目录是带有go子目录的用户的主目录,或$HOME/go。如果您使用的是低于1.8的Go版本,仍然认为将$HOME/go位置用于您的工作空间是最佳实践。

执行以下命令为您的Go工作空间创建目录结构:

shell 复制代码
mkdir -p $HOME/go/{bin,src}

-p选项告诉mkdir在目录中创建所有的parents,即使它们目前不存在。使用{bin,src}mkdir创建了一组参数,并告诉它创建bin目录和src目录。

这将确保以下目录结构已经就绪:

shell 复制代码
└── $HOME
    └── go
        ├── bin
        └── src

在Go 1.8之前,需要设置一个名为$GOPATH的本地环境变量。$GOPATH告诉编译器在哪里可以找到导入的第三方源代码,以及你编写的任何本地源代码。虽然不再明确要求,但它仍然被认为是一种良好的实践,因为许多第三方工具仍然依赖于该变量的设置。

你可以通过在~/.profile中添加全局变量来设置$GOPATH。你可以根据shell配置将其添加到.zshrc.bashrc文件中。

首先,用nano或者你喜欢的文本编辑器打开~/.profile:

shell 复制代码
nano ~/.profile

通过在文件中添加以下内容来设置$GOPATH:

~/.profile

shell 复制代码
export GOPATH=$HOME/go

当Go编译和安装工具时,它将把它们放在$GOPATH/bin目录中。为了方便起见,通常将工作区的/bin子目录添加到~/.profile中的PATH中:

~/.profile

shell 复制代码
export PATH=$PATH:$GOPATH/bin

这将允许您在系统的任何地方运行通过Go工具编译或下载的任何程序。

最后,你需要将go二进制文件添加到你的PATH中。你可以通过在行末尾添加/usr/local/go/bin来实现:

~/.profile

shell 复制代码
export PATH=$PATH:$GOPATH/bin:/usr/local/go/bin

/usr/local/go/bin添加到您的$PATH中,可以使所有的go工具在您系统的任何地方可用。

更新shell,执行下面的命令来加载全局变量:

shell 复制代码
. ~/.profile

你可以使用echo命令并检查输出来验证$PATH是否被更新:

shell 复制代码
echo $PATH

您将看到$GOPATH/bin,它将显示在您的主目录中。如果你以root身份登录,你会在路径中看到/root/go/bin

shell 复制代码
Output/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/root/go/bin:/usr/local/go/bin

您还将看到/usr/local/ Go /bin的Go工具路径:

shell 复制代码
Output/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/root/go/bin:/usr/local/go/bin

通过检查Go的当前版本来验证安装:

go 复制代码
go version

我们应该得到这样的输出:

shell 复制代码
Outputgo version go1.12.1 linux/amd64

现在您已经创建了工作区的根并设置了$GOPATH环境变量,您可以使用以下目录结构创建未来的项目。这个例子假设你使用github.com作为你的仓库:

shell 复制代码
$GOPATH/src/github.com/username/project

举个例子,如果你在做'https://github.com/digitalocean/godo'项目,它将存储在以下目录中:

shell 复制代码
$GOPATH/src/github.com/digitalocean/godo

这个项目结构将使项目可以使用go get工具。它还将有助于后面的可读性。你可以使用go get命令并获取godo库来验证这一点:

go 复制代码
go get github.com/digitalocean/godo

这将下载godo库的内容,并在您的计算机上创建$GOPATH/src/github.com/digitalocean/godo目录。

你可以通过列出目录来检查godo包是否成功下载:

shell 复制代码
ll $GOPATH/src/github.com/digitalocean/godo

你应该会看到类似下面的输出:

shell 复制代码
Outputdrwxr-xr-x 4 root root  4096 Apr  5 00:43 ./
drwxr-xr-x 3 root root  4096 Apr  5 00:43 ../
drwxr-xr-x 8 root root  4096 Apr  5 00:43 .git/
-rwxr-xr-x 1 root root     8 Apr  5 00:43 .gitignore*
-rw-r--r-- 1 root root    61 Apr  5 00:43 .travis.yml
-rw-r--r-- 1 root root  2808 Apr  5 00:43 CHANGELOG.md
-rw-r--r-- 1 root root  1851 Apr  5 00:43 CONTRIBUTING.md
.
.
.
-rw-r--r-- 1 root root  4893 Apr  5 00:43 vpcs.go
-rw-r--r-- 1 root root  4091 Apr  5 00:43 vpcs_test.go

在此步骤中,您创建了Go工作区并配置了必要的环境变量。在下一步中,您将使用一些代码测试工作区。

第3步 - 创建一个简单的程序

现在你已经设置好了Go工作空间,创建一个"Hello, World!""计划。这将确保正确配置工作空间,并为您提供更熟悉Go的机会。因为我们创建的是单个Go源文件,而不是实际的项目,所以我们不需要在工作空间中执行此操作。

在你的主目录中,打开一个命令行文本编辑器,例如nano,并创建一个新文件:

shell 复制代码
nano hello.go

在新文件中编写你的程序:

go 复制代码
package main

import "fmt"

func main() {
	fmt.Println("Hello, World!")
}

这段代码将使用fmt包并以Hello, World!作为参数调用Println函数。这将导致程序运行时,在终端上打印出短语Hello, World!

通过按下CTRLX键退出nano。当提示保存文件时,按Y,然后按ENTER

退出nano回到shell后,运行程序:

go 复制代码
go run hello.go

hello.go程序终端产生以下输出:

shell 复制代码
OutputHello, World!

在此步骤中,您使用了一个基本程序来验证您的Go工作区是否正确配置。

总结

恭喜你!至此,您已经在Ubuntu机器上设置好了Go编程工作区,可以开始编码项目了!

相关推荐
落非26 分钟前
Ubuntu配置阿里云docker apt源
ubuntu·阿里云·docker
YRr YRr5 小时前
ubuntu ros 解决建完图后 保存的地图非常小的问题
linux·运维·ubuntu
@东辰8 小时前
【golang-技巧】-自定义k8s-operator-by kubebuilder
开发语言·golang·kubernetes
@东辰10 小时前
【golang-技巧】- 定时任务 - cron
开发语言·golang·cron
jerry60916 小时前
7天用Go从零实现分布式缓存GeeCache(改进)(未完待续)
分布式·缓存·golang
杜杜的man16 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
大熊程序猿19 小时前
ubuntu 安装kafka-eagle
linux·ubuntu·kafka
Uncertainty!!19 小时前
更改Ubuntu22.04锁屏壁纸
ubuntu·锁屏壁纸
甘橘籽21 小时前
【RPC】 gRPC、pb基本使用--经验与总结
golang
杜杜的man1 天前
【go从零单排】HTTP客户端和服务端
开发语言·http·golang