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的安裝。

相關文章
相關標籤/搜索