Go-笔记之详细聊聊如何安装-Go

39次阅读

共计 3997 个字符,预计需要花费 10 分钟才能阅读完成。

继上篇系统地介绍 go 之后,接下来进入 go 的开发环境搭建系列。编写任何一门语言代码都离不开两样工具,语言开发包和代码编辑工具。

今天先来聊聊如何安装 golang。或许我们都会觉得这种事非常简单,不值得写篇文章介绍。最初我也是这么想的。但深入了解下来,渐渐感觉这也是一件很有意思的事情。

如何安装

和其他语言的安装类似,go 的安装我们也可以采用三种方式进行,从简单到复杂依次是通过系统方式安装、官方二进制包安装和源码编译安装。

系统方式

不同操作系统通常都会为 go 提供相应的软件安装方式。这种方式很大程度上简化了安装过程,能为我们省去一些繁杂的步骤。下面分别介绍下不同系统下的安装方式:

windows

在 windows 下,软件安装通常可通过下载类似 setup.exe/msi 软件包来操作。按照导航的提示,不断执行 “ 下一步 ” “ 下一步 ” 即可完成。访问 下地地址 将看到如下内容:

选择其中的 “Microsoft Windows” 下载 windows 安装包。现在的系统基本都是 64 位的了,一般情况下不用考虑 32/64 位系统的问题。

下载好了安装包,点击启动执行,接下来的步骤就是按导航提示一步步操作即可。有一点要注意的是,GO 的默认安装在 C:GO,如果要修改默认安装路径,在见到如下界面时重新选择。

ubuntu/debian

在 debian 或 ubuntu 上,我们可使用 apt-get 命令安装 go。比如,在 Ubuntu 16.04.5 LTS 系统,使用如下命令安装:

sudo apt-get update // 视情况决定是否更新
sudo apt-get install golang-go

如果是新建的系统,建议先 update 下软件源。否则可能会因为某些源异常而无法顺利安装。

centos/redhat

在 centos 或 redhat 上,我们可以使用 yum 命令安装 go。比如,在 CentOS 7.5 上,使用如下命令安装:

$ yum epel-release
$ yum install golang

先下载了 epel-releaes 源,可防止出现 yum 安装 golang 不支持或版本太旧的问题。

macos

在 macos 上,我们可使用 pkg 文件或 homebrew 安装 go。

pkg 的安装方式与 windows 的 setup.exe/msi 的类似,下载软件然后按导航 “ 下一步 ” “ 下一步 ” 即可完成。

来说说如何使用 homebrew 安装。和 yum 和 apt-get 不同,homebrew 并非 mac 系统自带,我们需要先安装。进入 homebrew 官网,页面顶部便说明了安装的方式,命令如下:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

接着安装 go,命令如下:

$ brew install go

非常简单就完成了安装。

系统安装方式的优点是简单。缺点是我们不能保证系统提供给的版本一定能满足我们的要求,比如上面 ubuntu 安装的 go 版本就较低,为 go1.6。

二进制包

接下来说说如何使用二进制包安装。所谓二进制包,也就是已经编译好的包。这种安装方式在不同的操作系统上步骤类似,考虑到 windows 用户最多,就以 windows 为例吧。

再次进入到下载页面,在列表可如下内容。因为我用的 32 位 windows 虚拟机,下载 i386 的包。

接着把下载的压缩包解压到某个文件夹,比如 c:Program Files 下,进入查看,会发现其中已经包含了新的名为 go 的文件夹。

至此,二进制包的方式安装就完成了。因为二进制包是已编译好的软件包,所以不同系统、CPU 架构下需要下载与之相应的包。

我们或许会想,就是移动个文件夹?是的,系统安装其实也就是做这些事情,不同在于系统安装在简化了操作的同时也会针对性做一些设置,比如配置好环境变量、文件分类存放等。

源码编译

这种安装方式的好处是与系统无关,一切控制权都掌握在自己身上,能限制我们的只有自己的能力。

上篇文章说过,go 在 1.5 版本已经移除了源码中全部的 C 代码,实现了自编译。因此,我们可以用系统已有 go 来编译源码,从而实现新版的安装。

前面在 ubuntu 下,我用 apt-get 安装的 golang 比较老的 go1.6 版。下面通过它来编译新版 go。

下载源码,最新版源码可点击 go1.12.2.src.tar.gz 下载。这里多说几句,go 的源码托管在 github 上,地址:https://github.com/golang/go,如想提前尝试新功能,可直接从 github 拉取最新的代码编译。这也是源码编译安装的一个好处。

源码下载完成后进入源码目录即可编译。注意,如果用虚拟机编译,要保证有充足的内存。

$ tar zxvf go1.12.2.src.tar.gz       // 解压源码包
$ cd go/src
$ ./all.sh

执行./all.sh 即可完成编译安装,也挺简单的。这个过程会耗费一旦时间,要等待会。其实这里简化了很多细节,如果想仔细研究的话,可以去阅读官方文档 install go from source。

环境变量

在安装完 golang 后,还需了解三个环境变量,分别是 GOROOT、GOPATH、PATH。下面来分别介绍一下它们的作用。

GOROOT

GO 安装的根目录。该变量在不同的版本需要选择不同的处理方式。

在 GO 1.10 之前,我们需要视不同安装方式决定是否手动配置。比如源码编译安装,安装时会有默认设置。而采用二进制包安装,在 windows 系统中,推荐安装位置为 C:GO,在 Linux、freeBSD、OS X 系统,推荐安装在 /usr/local/go 下。如果要自定义安装位置,必须手动设置 GOROOT。如果采用系统方式安装,这一切已经帮我们处理好了。

关于这个话题,推荐阅读:you-dont-need-to-set-goroot 和分析源码安装 go 的过程。

在 GO 1.10 及以后,这个变量已经不用我们设置了,它会根据 go 工具集的位置,即相对 go tool 的位置来动态决定 GOROOT 的值。说简单点,其实就是 go 命令决定 GOROOT 的位置。

关于这个话题,推荐阅读:use os.Executable to find GOROOT 和 github go issues 25002。

PATH

各个操作系统都存在的环境变量,用于指定系统可执行命令的默认查找路径,在不写完整路径情况下执行命令。

以 Windows 为例,我之前把 go 安装在 C:Program Filesgo 目录下,即 GOROOT 为 C:Program Filesgo,那么 PATH 变量可追加上 C:Program Filesgobin。

GOPATH

如果有朋友了解 python,可以将其类比为 python 的环境变量 PYTHONPATH,用来设置我们的工作目录,即编写代码的地方。包也都是从 GOPATH 设置的路径中寻找。

在 go 1.8 之前,该变量必须手动设置。go 1.8 及之后,如果没有设置,默认在 $HOME/go 目录下,即你的用户目录中的 go 目录下。

如何设置

介绍完三个变量,以我的 mac 为例介绍下设置方式吧。

类 unix 系统环境变量的设置方式都类似。使用 export 命令设置环境变量,并将命令加入到 /etc/profile,该文件会在开启 shell 控制台的情况下执行。具体操作命令如下:

$ sudo vim /etc/profile
...
export GOROOT=/usr/local/go         // 默认位置可不用设置,1.10 版本后也可以不设置
export PATH=$PATH:$GOROOT/bin
export GOPATH=/Users/polo/work/go   // 可设置多个目录 

经过以上步骤,环境变量配置完成,如果要立刻启用环境变量,我们需要重启下控制台。接着我们可以用 go env 看一下变量的配置情况。

$ go env
GOARCH="amd64"
GOBIN="/usr/local/go/bin"
...
GOPATH="/Users/polo/Public/Work/go"
...
GOROOT="/usr/local/go"

目录结构

再简单介绍下 go 的目录结构。以 windows 为例,进入 C:Program Filesgo 将看到如下内容。

介绍几个比较主要的目录:

  • api,里面包含所有 API 列表,好像 IDE 使用了里面的信息;
  • bin,里面是一些 go 的工具命令,主要是 go、gofmt、godoc,命令使用方法后面介绍
  • doc,go 的使用文档,可以让我们在没有网络的情况下也可以阅读;
  • src,主要是一些源码,如 golang 的编译器、各种工具集以及标准库的源码,

入门案例

介绍到这里已经差不多了,接着来写一个简单的例子,即经典的 Hello World。

首先,创建一个名为 hello.go 的文件,后缀必须为.go,内容如下:

package main

import "fmt"

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

上面的代码主要由几部分组成,分别是

  • package main,包声明,go 中的文件必须属于某个包,main 较为特殊,是程序入口所在;
  • import “fmt”,导入 fmt 包,这是一种引入包的方式,接下来就可以使用 fmt 提供的函数变量;
  • func main() {},func 关键字函数定义,main 是函数名,在 main 包中为程序的入口;
  • fmt.Println,main 函数中的代码块,表示调用 fmt 提供的 Println 函数打印 字符串 ”Hello World”

接下来,我们可以使用 go run 执行下这段代码,如下:

$ go run hello.go
Hello World

执行输出 “Hello World”。

总结

本篇文章从不同系统和不同方式角度出发,介绍了 golang 在各种场景下的安装方式。之后又详细介绍了几个在 go 中常用的环境变量,并以一个简单的例子结尾,最终完成了 go 的安装。

正文完
 0