申金鑫? 17101223365
轉載自公眾號flysnow_org
【嵌牛導讀】:本文介紹了各種系統(tǒng)下的Go語言環(huán)境的搭建
【嵌牛鼻子】:Go語言
【嵌牛提問】:如何搭建Go語言環(huán)境
【嵌牛正文】:
最近寫了很多Go語言的原創(chuàng)文章,其中Go語言實戰(zhàn)系列30篇贮尖,近15W字笛粘,還有最近更新的Go經典庫系列,不過通過大家的咨詢來看远舅,還是想要一些入門的知識闰蛔,這一篇文章寫于2017年初,這里再更新一下图柏,發(fā)給大家序六。
有讀者來信(微信公眾號消息)說能不能寫一篇關于Go語言環(huán)境的配置搭建,這樣對于想學Go語言的可以快速的配置起來一個環(huán)境蚤吹。這個的確是我忽略了例诀,按照我寫書的邏輯,也是先有環(huán)境搭建裁着,才能有語言功能介紹繁涂,這個直接把Go語言的開發(fā)環(huán)境搭建等配置跳過去實在不應該,所以這篇特意針對Go語言的開發(fā)環(huán)境搭建二驰、配置扔罪、編輯器選型、不同平臺程序生成等做了詳細的介紹桶雀。
下載
要搭建Go語言開發(fā)環(huán)境矿酵,我們第一步要下載go的開發(fā)工具包,目前最新穩(wěn)定版本是v1.9矗积,Go1.9增加了一些新特性全肮,我這里有一篇講 Go語言 | Go 1.9 新特性 Type Alias詳解 的,大家可以參考棘捣。Go為我們所熟知的所有平臺架構提供了開發(fā)工具包辜腺,比如我們熟知的Linux、Mac和Windows,其他的還有FreeBSD等评疗。
我們可以根據(jù)自己的機器操作系統(tǒng)選擇相應的開發(fā)工具包测砂,比如你的是Windows 64位的,就選擇windows-amd64的工具包壤巷;是Linux 32位的就選擇linux-386的工具包邑彪∏票校可以自己查看下自己的操作系統(tǒng)胧华,然后選擇,Mac的現(xiàn)在都是64位的宙彪,直接選擇就可以了矩动。
開發(fā)工具包又分為安裝版和壓縮版。安裝版是Mac和Windows特有的释漆,他們的名字類似于:
go1.9.darwin-amd64.pkg
go1.9.windows-386.msi
go1.9.windows-amd64.msi
安裝版悲没,顧名思義,雙擊打開會出現(xiàn)安裝向導男图,讓你選擇安裝的路徑示姿,幫你設置好環(huán)境比安康等信息,比較省事方便一些逊笆。
壓縮版的就是一個壓縮文件栈戳,可以解壓得到里面的內容,他們的名字類似于:
go1.9.darwin-amd64.tar.gz
go1.9.linux-386.tar.gz
go1.9.linux-amd64.tar.gz
go1.9.windows-386.zip
go1.9.windows-amd64.zip
壓縮版我們下載后需要解壓难裆,然后自己移動到要存放的路徑下子檀,并且配置環(huán)境變量等信息,相比安裝版來說乃戈,比較復雜一些褂痰,手動配置的比較多。
根據(jù)自己的操作系統(tǒng)選擇后症虑,就可以下載開發(fā)工具包了缩歪,Go語言的官方下載地址是 https://golang.org/dl/ 可以打開選擇版本下載,如果該頁面打不開谍憔,或者打開了下載不了匪蝙,可以使用鏡像網站 http://mirrors.flysnow.org/ ,打開后搜索或者找到Golang,選擇相應的版本下載韵卤,這個鏡像網站會同步更新官方版本骗污,基本上都是最新版,可以放心使用沈条。
Linux下安裝
我們以Ubuntu 64位為例進行演示需忿,CentOS等其他Linux發(fā)行版大同小異。
下載go1.9.linux-amd64.tar.gz后,進行解壓屋厘,你可以采用自帶的解壓軟件解壓涕烧,如果沒有可以在終端行使用tar命令行工具解壓,我們這里選擇的安裝目錄是/usr/local/go,可以使用如下命令:
tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
如果提示沒有權限汗洒,在最前面加上sudo以root用戶的身份運行议纯。運行后,在/usr/local/下就可以看到go目錄了溢谤。如果是自己用軟件解壓的瞻凤,可以拷貝到/usr/local/go下,但是要保證你的go文件夾下是bin世杀、src阀参、doc等目錄,不要go文件夾下又是一個go文件夾瞻坝,這樣就雙重嵌套了蛛壳。
然后就要配置環(huán)境變量了,Linux下又兩個文件可以配置所刀,其中/etc/profile是針對所有用戶都有效的衙荐;$HOME/.profile是針對當前用戶有效的,可以根據(jù)自己的情況選擇浮创。
針對所有用戶的需要重啟電腦才可以生效忧吟;針對當前用戶的,在終端里使用source命令加載這個$HOME/.profile即可生效蒸矛。
source ~/.profile
使用文本編輯器比如VIM編輯他們中的任意一個文件瀑罗,在文件的末尾添加如下配置保存即可:
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
其中GOROOT環(huán)境變量表示我們GO的安裝目錄,這樣其他軟件比如我們使用的Go開發(fā)IDE就可以自動的找到我們的Go安裝目錄雏掠,達到自動配置Go SDK的目的斩祭。
第二句配置是把/usr/local/go/bin這個目錄加入到環(huán)境變量PATH里,這樣我可以在終端里直接輸入go等常用命令使用了乡话,而不用再加上/usr/local/go/bin這一串絕對路徑摧玫,更簡潔方便。
以上配置好之后绑青,我們打開終端诬像,屬于如下命令,就可以看到go的版本等信息了闸婴。
?? ~ go version
go version go1.9 linux/amd64
這就說明我們已經安裝go成功了坏挠,如果提示go這個命令找不到,說明我們配置還不對邪乍,主要在PATH這個環(huán)境變量降狠,仔細檢查对竣,直到可以正常輸出為止。
Mac下安裝
Mac分為壓縮版和安裝版榜配,他們都是64位的否纬。壓縮版和Linux的大同小異,因為Mac和Linux都是基于Unix蛋褥,終端這一塊基本上是相同的临燃。
壓縮版解壓后,就可以和Linux一樣放到一個目錄下烙心,這里也以/usr/local/go/為例膜廊。在配置環(huán)境變量的時候,針對所有用戶和Linux是一樣的弃理,都是/etc/profile這個文件溃论;針對當前用戶,Mac下是$HOME/.bash_profile痘昌,其他配置都一樣,包括編輯sudo權限和生效方式炬转,最后在終端里測試:
?? ~ go version
go version go1.9 darwin/amd64
Mac安裝版下載后雙擊可以看到安裝界面辆苔,按照提示一步步選擇操作即可。安裝版默認安裝目錄是/usr/local/go扼劈,并且也會自動的把/usr/local/go/bin目錄加入到PATH環(huán)境變量中驻啤,重新打開一個終端,就可以使用go version進行測試了荐吵,更快捷方便一些骑冗。
Windows下安裝
Windows也有壓縮版和安裝版婴栽,又分為32和64位以供選擇诈胜,不過目前大家都是64位,選擇這個更好一些璃赡。
Window的壓縮版是一個ZIP壓縮包薯蝎,下載后使用winrar等軟件就可以解壓遥倦,解壓后要選擇一個存放目錄,比如c:\Go下占锯,這個c:\Go就是Go的安裝目錄了袒哥,他里面有bin、src消略、doc等目錄堡称。
然后就是環(huán)境變量的配置,Window也和Linux一樣分為針對所有用戶的系統(tǒng)變量艺演,和針對當前用戶的用戶變量設置却紧,可以自行選擇婿失,比如系統(tǒng)變量,針對所有用戶都有效啄寡。
以Window 7為例豪硅,右擊我的電腦->屬性會打開系統(tǒng)控制面板,然后在左側找到高級系統(tǒng)設置點擊打開挺物,會在彈出的界面最下方看到環(huán)境變量按鈕懒浮,點擊它,就可以看到環(huán)境變量配置界面了识藤。上半部分是用戶變量配置砚著,下半部分是系統(tǒng)變量配置。
我們在系統(tǒng)變量里點擊新建痴昧,變量名輸入GOROOT稽穆,變量值是我們剛剛安裝的go路徑c:\Go,這樣就配置好了GO目錄的安裝路徑了。
然后修改PATH系統(tǒng)變量赶撰,在變量值里添加%%GOROOT\bin路徑舌镶,和其他PATH變量以;(分號,Linux下是冒號)分割即可豪娜。這樣我們就可以在CMD里直接輸入go命令使用了餐胀。
打開我們的終端,輸入go version測試下瘤载,好了的話就可以看到輸出的信息了否灾。
Window的安裝版相比來說就比較簡單一些,雙擊就可以按照提示一步步安裝鸣奔,默認安裝路徑是c:\Go,并且會配置好PATH環(huán)境變量墨技,可以直接打開CMD終端使用。
設置工作目錄
工作目錄就是我們用來存放開發(fā)的源代碼的地方挎狸,對應的也是Go里的GOPATH這個環(huán)境變量扣汪。這個環(huán)境變量指定之后,我們編譯源代碼等生成的文件都會放到這個目錄下伟叛,GOPATH環(huán)境變量的配置參考上面的安裝Go私痹,配置到/etc/profile或者Windows下的系統(tǒng)變量里。
這個工作目錄我們可以根據(jù)自己的設置指定统刮,比如我的Mac在$HOME/code/go下紊遵,Window的可以放到d:\code\go下等。該目錄下有3個子目錄侥蒙,他們分別是:
.
├── bin
├── pkg
└── src
bin文件夾存放go install命名生成的可執(zhí)行文件暗膜,可以把$GOPATH/bin路徑加入到PATH環(huán)境變量里,就和我們上面配置的$GOROOT/bin一樣鞭衩,這樣就可以直接在終端里使用我們go開發(fā)生成的程序了学搜。
pkg文件夾是存在go編譯生成的文件娃善。
src存放的是我們的go源代碼,不同工程項目的代碼以包名區(qū)分瑞佩。
go項目工程結構
配置好工作目錄后聚磺,就可以編碼開發(fā)了,在這之前炬丸,我們看下go的通用項目結構,這里的結構主要是源代碼相應地資源文件存放目錄結構瘫寝。
我們知道源代碼都是存放在GOPATH的src目錄下,那么多個多個項目的時候稠炬,怎么區(qū)分呢焕阿?答案是通過包,使用包來組織我們的項目目錄結構首启。有過java開發(fā)的都知道暮屡,使用包進行組織代碼,包以網站域名開頭就不會有重復毅桃,比如我的個人網站是flysnow.org,我就可以以·flysnow.org·的名字創(chuàng)建一個文件夾褒纲,我自己的go項目都放在這個文件夾里,這樣就不會和其他人的項目沖突疾嗅,包名也是唯一的外厂。
如果沒有個人域名,現(xiàn)在流行的做法是使用你個人的github.com代承,因為每個人的是唯一的,所以也不會有重復渐扮。
src
├── flysnow.org
├── github.com
├── golang.org
├── gopkg.in
├── qiniupkg.com
└── sourcegraph.com
如上论悴,src目錄下跟著一個個域名命名的文件夾。再以github.com文件夾為例墓律,它里面又是以github用戶名命名的文件夾膀估,用于存儲屬于這個github用戶編寫的go源代碼。
src/github.com/spf13
├── afero
├── cast
├── cobra
├── fsync
├── hugo
├── jwalterweatherman
├── nitro
├── pflag
└── viper
那么我們如何引用一個包呢耻讽,也就是go里面的import察纯。其實非常簡單,通過包路徑针肥,包路徑就是從src目錄開始饼记,逐級文件夾的名字用/連起來就是我們需要的包名,比如:
import (
"github.com/spf13/hugo/commands"
)
Hello World
都準備好了慰枕,讓我們創(chuàng)建一個hello項目具则,測試一下。我的項目的路徑為src/flysnow.org/hello/具帮。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World")
}
Go版Hello World非常簡單博肋。在src/flysnow.org/hello/目錄下運行go run main.go命令就可以看到打印的輸出Hello World低斋,下面解釋下這段代碼。
1.package 是一個關鍵字匪凡,定義一個包膊畴,和Java里的package一樣,也是模塊化的關鍵病游。
main包是一個特殊的包名唇跨,它表示當前是一個可執(zhí)行程序,而不是一個庫礁遵。
import 也是一個關鍵字轻绞,表示要引入的包,和Java的import關鍵字一樣佣耐,引入后才可以使用它政勃。
fmt是一個包名,這里表示要引入fmt這個包兼砖,這樣我們就可以使用它的函數(shù)了奸远。
main函數(shù)是主函數(shù),表示程序執(zhí)行的入口讽挟,Java也有同名函數(shù)懒叛,但是多了一個String[]類型的參數(shù)。
Println是fmt包里的函數(shù)耽梅,和Java里的system.out.println作用類似薛窥,這里輸出一段文字。
整段代碼非常簡潔眼姐,關鍵字诅迷、函數(shù)、包等和Java非常相似众旗,不過注意罢杉,go是不需要以;(分號)結尾的。
安裝程序
安裝的意思贡歧,就是生成可執(zhí)行的程序滩租,以供我們使用,為此go為我們提供了很方便的install命令利朵,可以快速的把我們的程序安裝到$GOAPTH/bin目錄下律想。
go install flysnow.org/hello
打開終端,運行上面的命令即可哗咆,install后跟全路徑的包名蜘欲。 然后我們在終端里運行hello就看到打印的Hello World了。
?? ~ hello
Hell World
跨平臺編譯
以前運行和安裝晌柬,都是默認根據(jù)我們當前的機器生成的可執(zhí)行文件姥份,比如你的是Linux 64位郭脂,就會生成Linux 64位下的可執(zhí)行文件,比如我的Mac澈歉,可以使用go env查看編譯環(huán)境,以下截取重要的部分展鸡。
?? ~ go env
GOARCH="amd64"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
注意里面兩個重要的環(huán)境變量GOOS和GOARCH,其中GOOS指的是目標操作系統(tǒng),它的可用值為:
darwin
freebsd
linux
windows
android
dragonfly
netbsd
openbsd
plan9
solaris
一共支持10中操作系統(tǒng)埃难。GOARCH指的是目標處理器的架構莹弊,目前支持的有:
arm
arm64
386
amd64
ppc64
ppc64le
mips64
mips64le
s390x
一共支持9中處理器的架構,GOOS和GOARCH組合起來涡尘,支持生成的可執(zhí)行程序種類很多忍弛,具體組合參考https://golang.org/doc/install/source#environment。如果我們要生成不同平臺架構的可執(zhí)行程序考抄,只要改變這兩個環(huán)境變量就可以了细疚,比如要生成linux 64位的程序,命令如下:
GOOS=linux GOARCH=amd64 go build flysnow.org/hello
前面兩個賦值川梅,是更改環(huán)境變量疯兼,這樣的好處是只針對本次運行有效,不會更改我們默認的配置贫途。
獲取遠程包
go提供了一個獲取遠程包的工具go get,他需要一個完整的包名作為參數(shù)吧彪,只要這個完成的包名是可訪問的,就可以被獲取到丢早,比如我們獲取一個CLI的開源庫:
go get -v github.com/spf13/cobra/cobra
就可以下載這個庫到我們$GOPATH/src目錄下了姨裸,這樣我們就可以像導入其他包一樣import了。
特別提醒怨酝,go get的本質是使用源代碼控制工具下載這些庫的源代碼啦扬,比如git,hg等凫碌,所以在使用之前必須確保安裝了這些源代碼版本控制工具。
如果我們使用的遠程包有更新胃榕,我們可以使用如下命令進行更新,多了一個-u標識盛险。
go get -u -v github.com/spf13/cobra/cobra
獲取gitlab私有庫包
如果是私有的git庫怎么獲取呢?比如在公司使用gitlab搭建的git倉庫勋又,設置的都是private權限的苦掘。這種情況下我們可以配置下git,就可以了楔壤,在此之前你公司使用的gitlab必須要在7.8之上鹤啡。然后要把我們http協(xié)議獲取的方式換成ssh,假設你要獲取http://git.flysnow.org蹲嚣,對應的ssh地址為git@git.flysnow.org递瑰,那么要在終端執(zhí)行如下命令祟牲。
git config --global url."git@git.flysnow.org:".insteadOf "http://git.flysnow.org/"
這段配置的意思就是,當我們使用http://git.flysnow.org/獲取git庫代碼的時候抖部,實際上使用的是git@git.flysnow.org這個url地址獲取的说贝,也就是http到ssh協(xié)議的轉換,是自動的慎颗,他其實就是在我們的~/.gitconfig配置文件中乡恕,增加了如下配置:
[url "git@git.flysnow.org:"]
insteadOf = http://git.flysnow.org/
現(xiàn)在我們就可以使用go get直接獲取了,比如:
go get -v -insecure git.flysnow.org/hello
仔細看俯萎,多了一個-insecure標識傲宜,因為我們使用的是http協(xié)議, 是不安全的夫啊。當然如果你自己搭建的gitlab支持https協(xié)議函卒,就不用加-insecure了,同時把上面的url insteadOf換成https的就可以了涮母。
Go還有很多命令行工具可以使用谆趾,更多的請參考Go語言實戰(zhàn)筆記(二)| Go開發(fā)工具
Go編輯器推薦
Go采用的是UTF-8的文本文件存放源代碼,所以原則上你可以使用任何一款文本編輯器叛本,這里推薦幾款比較流行的沪蓬。
對于新手來說,我推薦功能強大的IDE来候,功能強大跷叉,使用方便,比如jetbrains idea+golang插件营搅,上手容易云挟,而且它家的IDE都一樣,會一個都會了转质,包括菜單园欣、快捷鍵等。
值得高興的是jetbrains針對Go這門語言推出了專用IDE gogland休蟹,也足以證明go的流行以及jetbrains的重視沸枯。goglang地址為 https://www.jetbrains.com/go/,可以前往下載使用。
其次可以推薦微軟的VS Code以及Sublime Text赂弓,這兩款編輯器插件強大绑榴,快捷鍵方便,都對Go支持的很好盈魁,也擁有大量的粉絲。
最后推薦老牌的VIM赤套,這個不用多介紹飘痛,大家都知道于毙。
編輯器只是為了提高開發(fā)效率敦冬,大家哪個順手用哪個,不存在誰更NB唯沮。
一些文章推薦
一個就是我的GO語言實戰(zhàn)筆記系列,這個可以入門和深入萌庆,還有最近寫的Go的第三方庫介紹和分析,可以讓我們快速上手以及了解原理實踐币旧。
Go語言實戰(zhàn)筆記(一)| Go包管理
Go語言實戰(zhàn)筆記(二)| Go開發(fā)工具
Go語言實戰(zhàn)筆記(四)| Go 數(shù)組
Go語言實戰(zhàn)筆記(六)| Go Map
Go語言實戰(zhàn)筆記(九)| Go 接口
Go語言實戰(zhàn)筆記(十二)| Go goroutine
Go語言實戰(zhàn)筆記(二十六)| Go unsafe 包之內存布局
Go語言經典庫使用分析(五)| Negroni 中間件(一)
最近新出了Go1.9践险,這篇Go1.9 Type Alias文章推薦大家看下,了解這門新特性吹菱。Go語言 | Go 1.9 新特性 Type Alias詳解
此外,關于Go學習的書等占遥,我這里有一篇知乎比較高的回答输瓜,供大家參考系統(tǒng)學習GO,推薦幾本靠譜的書?
到這里尤揣,整個Go開發(fā)環(huán)境就詳細介紹完了,不光有環(huán)境安裝搭建负芋,還有目錄結構嗜愈、常用命令使用等都進行了介紹,這篇文章看完后芝硬,已經入門了Go了轧房,剩下的再看看Go的語法和庫,就可以很流暢的編寫Go程序了迟赃。