GO笔记之详细聊聊如何安装GO

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

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

如何安装

和其余语言的安装相似,go的安装咱们也能够采用三种方式进行,从简单到复杂依次是经过系统方式安装、官方二进制包安装和源码编译安装。github

系统方式

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

windowsshell

在windows下,软件安装一般可经过下载相似 setup.exe/msi 软件包来操做。按照导航的提示,不断执行 "下一步" "下一步" 便可完成。访问 下地地址 将看到以下内容:macos

选择其中的 "Microsoft Windows" 下载windows安装包。如今的系统基本都是64位的了,通常状况下不用考虑32/64位系统的问题。ubuntu

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

ubuntu/debianwindows

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

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上,地址: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 GOROOTgithub go issues 25002

PATH

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

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

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 Files\go将看到以下内容。

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

  • 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的安装。

相关文章
相关标签/搜索