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

栏目: Go · 发布时间: 6年前

内容简介:继上篇系统地介绍go之后,接下来进入go的开发环境搭建系列。编写任何一门语言代码都离不开两样工具,语言开发包和代码编辑工具。今天先来聊聊如何安装golang。或许我们都会觉得这种事非常简单,不值得写篇文章介绍。最初我也是这么想的。但深入了解下来,渐渐感觉这也是一件很有意思的事情。和其他语言的安装类似,go的安装我们也可以采用三种方式进行,从简单到复杂依次是通过系统方式安装、官方二进制包安装和源码编译安装。

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

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

如何安装

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

系统方式

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

windows

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

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

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

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

GO笔记之详细聊聊如何安装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的包。

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

接着把下载的压缩包解压到某个文件夹,比如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将看到如下内容。

GO笔记之详细聊聊如何安装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的安装。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First HTML5 Programming

Head First HTML5 Programming

Eric Freeman、Elisabeth Robson / O'Reilly Media / 2011-10-18 / USD 49.99

What can HTML5 do for you? If you're a web developer looking to use this new version of HTML, you might be wondering how much has really changed. Head First HTML5 Programming introduces the key featur......一起来看看 《Head First HTML5 Programming》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换