Go語(yǔ)言開(kāi)發(fā)環(huán)境搭建詳解

歡迎掃碼關(guān)注公眾號(hào)flysnow_org,第一時(shí)間看后續(xù)文章。覺(jué)得有幫助的話,順手分享到朋友圈吧,感謝支持。

前段時(shí)間寫(xiě)了好幾篇關(guān)于Go語(yǔ)言的文章,有入門(mén)的Go系統(tǒng)介紹,也有比較深入的網(wǎng)絡(luò)代理分析實(shí)現(xiàn),讀者們看了也給予了很多好評(píng),這里非常感謝。

有讀者來(lái)信(微信公眾號(hào)消息)說(shuō)能不能寫(xiě)一篇關(guān)于Go語(yǔ)言環(huán)境的配置搭建,這樣對(duì)于想學(xué)Go語(yǔ)言的可以快速的配置起來(lái)一個(gè)環(huán)境。這個(gè)的確是我忽略了,按照我寫(xiě)書(shū)的邏輯,也是先有環(huán)境搭建,才能有語(yǔ)言功能介紹,這個(gè)直接把Go語(yǔ)言的開(kāi)發(fā)環(huán)境搭建等配置跳過(guò)去實(shí)在不應(yīng)該,所以這篇特意針對(duì)Go語(yǔ)言的開(kāi)發(fā)環(huán)境搭建、配置、編輯器選型、不同平臺(tái)程序生成等做了詳細(xì)的介紹。

下載

要搭建Go語(yǔ)言開(kāi)發(fā)環(huán)境,我們第一步要下載go的開(kāi)發(fā)工具包,目前最新穩(wěn)定版本是v1.7.4。Go為我們所熟知的所有平臺(tái)架構(gòu)提供了開(kāi)發(fā)工具包,比如我們熟知的Linux、Mac和Windows,其他的還有FreeBSD等。

我們可以根據(jù)自己的機(jī)器操作系統(tǒng)選擇相應(yīng)的開(kāi)發(fā)工具包,比如你的是Windows 64位的,就選擇windows-amd64的工具包;是Linux 32位的就選擇linux-386的工具包。可以自己查看下自己的操作系統(tǒng),然后選擇,Mac的現(xiàn)在都是64位的,直接選擇就可以了。

開(kāi)發(fā)工具包又分為安裝版和壓縮版。安裝版是Mac和Windows特有的,他們的名字類(lèi)似于:

  • go1.7.4.darwin-amd64.pkg
  • go1.7.4.windows-386.msi
  • go1.7.4.windows-amd64.msi

安裝版,顧名思義,雙擊打開(kāi)會(huì)出現(xiàn)安裝向?qū)?,讓你選擇安裝的路徑,幫你設(shè)置好環(huán)境比安康等信息,比較省事方便一些。

壓縮版的就是一個(gè)壓縮文件,可以解壓得到里面的內(nèi)容,他們的名字類(lèi)似于:

  • go1.7.4.darwin-amd64.tar.gz
  • go1.7.4.linux-386.tar.gz
  • go1.7.4.linux-amd64.tar.gz
  • go1.7.4.windows-386.zip
  • go1.7.4.windows-amd64.zip

壓縮版我們下載后需要解壓,然后自己移動(dòng)到要存放的路徑下,并且配置環(huán)境變量等信息,相比安裝版來(lái)說(shuō),比較復(fù)雜一些,手動(dòng)配置的比較多。

根據(jù)自己的操作系統(tǒng)選擇后,就可以下載開(kāi)發(fā)工具包了,Go語(yǔ)言的官方下載地址是 https://golang.org/dl/ 可以打開(kāi)選擇版本下載,如果該頁(yè)面打不開(kāi),或者打開(kāi)了下載不了,可以使用鏡像網(wǎng)站 http://mirrors.flysnow.org/ ,打開(kāi)后搜索或者找到Golang,選擇相應(yīng)的版本下載,這個(gè)鏡像網(wǎng)站會(huì)同步更新官方版本,基本上都是最新版,可以放心使用。

Linux下安裝

我們以Ubuntu 64位為例進(jìn)行演示,CentOS等其他Linux發(fā)行版大同小異。

下載go1.7.4.linux-amd64.tar.gz后,進(jìn)行解壓,你可以采用自帶的解壓軟件解壓,如果沒(méi)有可以在終端行使用tar命令行工具解壓,我們這里選擇的安裝目錄是/usr/local/go,可以使用如下命令:

tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz

如果提示沒(méi)有權(quán)限,在最前面加上sudo以root用戶(hù)的身份運(yùn)行。運(yùn)行后,在/usr/local/下就可以看到go目錄了。如果是自己用軟件解壓的,可以拷貝到/usr/local/go下,但是要保證你的go文件夾下是bin、src、doc等目錄,不要go文件夾下又是一個(gè)go文件夾,這樣就雙重嵌套了。

然后就要配置環(huán)境變量了,Linux下又兩個(gè)文件可以配置,其中/etc/profile是針對(duì)所有用戶(hù)都有效的;$HOME/.profile是針對(duì)當(dāng)前用戶(hù)有效的,可以根據(jù)自己的情況選擇。

針對(duì)所有用戶(hù)的需要重啟電腦才可以生效;針對(duì)當(dāng)前用戶(hù)的,在終端里使用source命令加載這個(gè)$HOME/.profile即可生效。

source ~/.profile

使用文本編輯器比如VIM編輯他們中的任意一個(gè)文件,在文件的末尾添加如下配置保存即可:

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

其中GOROOT環(huán)境變量表示我們GO的安裝目錄,這樣其他軟件比如我們使用的Go開(kāi)發(fā)IDE就可以自動(dòng)的找到我們的Go安裝目錄,達(dá)到自動(dòng)配置Go SDK的目的。

第二句配置是把/usr/local/go/bin這個(gè)目錄加入到環(huán)境變量PATH里,這樣我可以在終端里直接輸入go等常用命令使用了,而不用再加上/usr/local/go/bin這一串絕對(duì)路徑,更簡(jiǎn)潔方便。

以上配置好之后,我們打開(kāi)終端,屬于如下命令,就可以看到go的版本等信息了。

?  ~ go version
go version go1.7.4 linux/amd64

這就說(shuō)明我們已經(jīng)安裝go成功了,如果提示go這個(gè)命令找不到,說(shuō)明我們配置還不對(duì),主要在PATH這個(gè)環(huán)境變量,仔細(xì)檢查,直到可以正常輸出為止。

Mac下安裝

Mac分為壓縮版和安裝版,他們都是64位的。壓縮版和Linux的大同小異,因?yàn)镸ac和Linux都是基于Unix,終端這一塊基本上是相同的。

壓縮版解壓后,就可以和Linux一樣放到一個(gè)目錄下,這里也以/usr/local/go/為例。在配置環(huán)境變量的時(shí)候,針對(duì)所有用戶(hù)和Linux是一樣的,都是/etc/profile這個(gè)文件;針對(duì)當(dāng)前用戶(hù),Mac下是$HOME/.bash_profile,其他配置都一樣,包括編輯sudo權(quán)限和生效方式,最后在終端里測(cè)試:

?  ~ go version
go version go1.7.4 darwin/amd64

Mac安裝版下載后雙擊可以看到安裝界面,按照提示一步步選擇操作即可。安裝版默認(rèn)安裝目錄是/usr/local/go,并且也會(huì)自動(dòng)的把/usr/local/go/bin目錄加入到PATH環(huán)境變量中,重新打開(kāi)一個(gè)終端,就可以使用go version進(jìn)行測(cè)試了,更快捷方便一些。

Windows下安裝

Windows也有壓縮版和安裝版,又分為32和64位以供選擇,不過(guò)目前大家都是64位,選擇這個(gè)更好一些。

Window的壓縮版是一個(gè)ZIP壓縮包,下載后使用winrar等軟件就可以解壓,解壓后要選擇一個(gè)存放目錄,比如c:\Go下,這個(gè)c:\Go就是Go的安裝目錄了,他里面有bin、src、doc等目錄。

然后就是環(huán)境變量的配置,Window也和Linux一樣分為針對(duì)所有用戶(hù)的系統(tǒng)變量,和針對(duì)當(dāng)前用戶(hù)的用戶(hù)變量設(shè)置,可以自行選擇,比如系統(tǒng)變量,針對(duì)所有用戶(hù)都有效。

以Window 7為例,右擊我的電腦->屬性會(huì)打開(kāi)系統(tǒng)控制面板,然后在左側(cè)找到高級(jí)系統(tǒng)設(shè)置點(diǎn)擊打開(kāi),會(huì)在彈出的界面最下方看到環(huán)境變量按鈕,點(diǎn)擊它,就可以看到環(huán)境變量配置界面了。上半部分是用戶(hù)變量配置,下半部分是系統(tǒng)變量配置。

我們?cè)谙到y(tǒng)變量里點(diǎn)擊新建,變量名輸入GOROOT,變量值是我們剛剛安裝的go路徑c:\Go,這樣就配置好了GO目錄的安裝路徑了。

然后修改PATH系統(tǒng)變量,在變量值里添加%%GOROOT\bin路徑,和其他PATH變量以;(分號(hào),Linux下是冒號(hào))分割即可。這樣我們就可以在CMD里直接輸入go命令使用了。

打開(kāi)我們的終端,輸入go version測(cè)試下,好了的話就可以看到輸出的信息了。

Window的安裝版相比來(lái)說(shuō)就比較簡(jiǎn)單一些,雙擊就可以按照提示一步步安裝,默認(rèn)安裝路徑是c:\Go,并且會(huì)配置好PATH環(huán)境變量,可以直接打開(kāi)CMD終端使用。

設(shè)置工作目錄

工作目錄就是我們用來(lái)存放開(kāi)發(fā)的源代碼的地方,對(duì)應(yīng)的也是Go里的GOPATH這個(gè)環(huán)境變量。這個(gè)環(huán)境變量指定之后,我們編譯源代碼等生成的文件都會(huì)放到這個(gè)目錄下,GOPATH環(huán)境變量的配置參考上面的安裝Go,配置到/etc/profile或者Windows下的系統(tǒng)變量里。

這個(gè)工作目錄我們可以根據(jù)自己的設(shè)置指定,比如我的Mac在$HOME/code/go下,Window的可以放到d:\code\go下等。該目錄下有3個(gè)子目錄,他們分別是:

.
├── bin
├── pkg
└── src
  • bin文件夾存放go install命名生成的可執(zhí)行文件,可以把$GOPATH/bin路徑加入到PATH環(huán)境變量里,就和我們上面配置的$GOROOT/bin一樣,這樣就可以直接在終端里使用我們go開(kāi)發(fā)生成的程序了。
  • pkg文件夾是存在go編譯生成的文件。
  • src存放的是我們的go源代碼,不同工程項(xiàng)目的代碼以包名區(qū)分。

go項(xiàng)目工程結(jié)構(gòu)

配置好工作目錄后,就可以編碼開(kāi)發(fā)了,在這之前,我們看下go的通用項(xiàng)目結(jié)構(gòu),這里的結(jié)構(gòu)主要是源代碼相應(yīng)地資源文件存放目錄結(jié)構(gòu)。

我們知道源代碼都是存放在GOPATH的src目錄下,那么多個(gè)多個(gè)項(xiàng)目的時(shí)候,怎么區(qū)分呢?答案是通過(guò)包,使用包來(lái)組織我們的項(xiàng)目目錄結(jié)構(gòu)。有過(guò)java開(kāi)發(fā)的都知道,使用包進(jìn)行組織代碼,包以網(wǎng)站域名開(kāi)頭就不會(huì)有重復(fù),比如我的個(gè)人網(wǎng)站是flysnow.org,我就可以以·flysnow.org·的名字創(chuàng)建一個(gè)文件夾,我自己的go項(xiàng)目都放在這個(gè)文件夾里,這樣就不會(huì)和其他人的項(xiàng)目沖突,包名也是唯一的。

如果沒(méi)有個(gè)人域名,現(xiàn)在流行的做法是使用你個(gè)人的github.com,因?yàn)槊總€(gè)人的是唯一的,所以也不會(huì)有重復(fù)。

src
├── github.com
├── golang.org
├── gopkg.in
├── qiniupkg.com
└── sourcegraph.com

如上,src目錄下跟著一個(gè)個(gè)域名命名的文件夾。再以github.com文件夾為例,它里面又是以github用戶(hù)名命名的文件夾,用于存儲(chǔ)屬于這個(gè)github用戶(hù)編寫(xiě)的go源代碼。

src/github.com/spf13
├── afero
├── cast
├── cobra
├── fsync
├── hugo
├── jwalterweatherman
├── nitro
├── pflag
└── viper

那么我們?nèi)绾我靡粋€(gè)包呢,也就是go里面的import。其實(shí)非常簡(jiǎn)單,通過(guò)包路徑,包路徑就是從src目錄開(kāi)始,逐級(jí)文件夾的名字用/連起來(lái)就是我們需要的包名,比如:

import (
    "github.com/spf13/hugo/commands"
)

Hello World

都準(zhǔn)備好了,讓我們創(chuàng)建一個(gè)hello項(xiàng)目,測(cè)試一下。我的項(xiàng)目的路徑為src/flysnow.org/hello/。

package main

import (
    "fmt"
)

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

Go版Hello World非常簡(jiǎn)單。在src/flysnow.org/hello/目錄下運(yùn)行go run main.go命令就可以看到打印的輸出Hello World,下面解釋下這段代碼。

  1. package 是一個(gè)關(guān)鍵字,定義一個(gè)包,和Java里的package一樣,也是模塊化的關(guān)鍵。
  2. main包是一個(gè)特殊的包名,它表示當(dāng)前是一個(gè)可執(zhí)行程序,而不是一個(gè)庫(kù)。
  3. import 也是一個(gè)關(guān)鍵字,表示要引入的包,和Java的import關(guān)鍵字一樣,引入后才可以使用它。
  4. fmt是一個(gè)包名,這里表示要引入fmt這個(gè)包,這樣我們就可以使用它的函數(shù)了。
  5. main函數(shù)是主函數(shù),表示程序執(zhí)行的入口,Java也有同名函數(shù),但是多了一個(gè)String[]類(lèi)型的參數(shù)。
  6. Println是fmt包里的函數(shù),和Java里的system.out.println作用類(lèi)似,這里輸出一段文字。

整段代碼非常簡(jiǎn)潔,關(guān)鍵字、函數(shù)、包等和Java非常相似,不過(guò)注意,go是不需要以;(分號(hào))結(jié)尾的。

安裝程序

安裝的意思,就是生成可執(zhí)行的程序,以供我們使用,為此go為我們提供了很方便的install命令,可以快速的把我們的程序安裝到$GOAPTH/bin目錄下。

go install flysnow.org/hello

打開(kāi)終端,運(yùn)行上面的命令即可,install后跟全路徑的包名。 然后我們?cè)诮K端里運(yùn)行hello就看到打印的Hello World了。

?  ~ hello
Hell World

跨平臺(tái)編譯

以前運(yùn)行和安裝,都是默認(rèn)根據(jù)我們當(dāng)前的機(jī)器生成的可執(zhí)行文件,比如你的是Linux 64位,就會(huì)生成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"

注意里面兩個(gè)重要的環(huán)境變量GOOSGOARCH,其中GOOS指的是目標(biāo)操作系統(tǒng),它的可用值為:

  1. darwin
  2. freebsd
  3. linux
  4. windows
  5. android
  6. dragonfly
  7. netbsd
  8. openbsd
  9. plan9
  10. solaris

一共支持10中操作系統(tǒng)。GOARCH指的是目標(biāo)處理器的架構(gòu),目前支持的有:

  1. arm
  2. arm64
  3. 386
  4. amd64
  5. ppc64
  6. ppc64le
  7. mips64
  8. mips64le
  9. s390x

一共支持9中處理器的架構(gòu),GOOSGOARCH組合起來(lái),支持生成的可執(zhí)行程序種類(lèi)很多,具體組合參考https://golang.org/doc/install/source#environment。如果我們要生成不同平臺(tái)架構(gòu)的可執(zhí)行程序,只要改變這兩個(gè)環(huán)境變量就可以了,比如要生成linux 64位的程序,命令如下:

GOOS=linux GOARCH=amd64 go build flysnow.org/hello

前面兩個(gè)賦值,是更改環(huán)境變量,這樣的好處是只針對(duì)本次運(yùn)行有效,不會(huì)更改我們默認(rèn)的配置。

獲取遠(yuǎn)程包

go提供了一個(gè)獲取遠(yuǎn)程包的工具go get,他需要一個(gè)完整的包名作為參數(shù),只要這個(gè)完成的包名是可訪問(wèn)的,就可以被獲取到,比如我們獲取一個(gè)CLI的開(kāi)源庫(kù):

go get -v github.com/spf13/cobra/cobra

就可以下載這個(gè)庫(kù)到我們$GOPATH/src目錄下了,這樣我們就可以像導(dǎo)入其他包一樣import了。

特別提醒,go get的本質(zhì)是使用源代碼控制工具下載這些庫(kù)的源代碼,比如git,hg等,所以在使用之前必須確保安裝了這些源代碼版本控制工具。

Go編輯器推薦

Go采用的是UTF-8的文本文件存放源代碼,所以原則上你可以使用任何一款文本編輯器,這里推薦幾款比較流行的。

對(duì)于新手來(lái)說(shuō),我推薦功能強(qiáng)大的IDE,功能強(qiáng)大,使用方便,比如jetbrains idea+golang插件,上手容易,而且它家的IDE都一樣,會(huì)一個(gè)都會(huì)了,包括菜單、快捷鍵等。值得高興的是jetbrains針對(duì)Go這門(mén)語(yǔ)言推出了專(zhuān)用IDE gogland,也足以證明go的流行以及jetbrains的重視。goglang地址為 https://www.jetbrains.com/go/,可以前往下載使用。

其次可以推薦微軟的VS Code以及Sublime Text,這兩款編輯器插件強(qiáng)大,快捷鍵方便,都對(duì)Go支持的很好,也擁有大量的粉絲。

最后推薦老牌的VIM,這個(gè)不用多介紹,大家都知道。

到這里,整個(gè)Go開(kāi)發(fā)環(huán)境就詳細(xì)介紹完了,不光有環(huán)境安裝搭建,還有目錄結(jié)構(gòu)、常用命令使用等都進(jìn)行了介紹,這篇文章看完后,已經(jīng)入門(mén)了Go了,剩下的再看看Go的語(yǔ)法和庫(kù),就可以很流暢的編寫(xiě)Go程序了。

歡迎掃碼關(guān)注公眾號(hào)flysnow_org,第一時(shí)間看后續(xù)文章。覺(jué)得有幫助的話,順手分享到朋友圈吧,感謝支持。

掃碼關(guān)注

更多閱讀推薦

Golang必備技巧:接口型函數(shù)
從Java到Golang快速入門(mén)
GitHub上優(yōu)秀的Go開(kāi)源項(xiàng)目
一個(gè)簡(jiǎn)單的Golang實(shí)現(xiàn)的Socket5 Proxy
一個(gè)簡(jiǎn)單的Golang實(shí)現(xiàn)的HTTP Proxy

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 100,585評(píng)論 9 468
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評(píng)論 25 709
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,180評(píng)論 2 33
  • 小婕女士快五十歲了,是一個(gè)待業(yè)在家,提前進(jìn)入退休狀態(tài)的中年婦女,沒(méi)什么特別的興趣愛(ài)好,也沒(méi)有什么特別聊得來(lái)的三兩好...
    瑞雪華章閱讀 686評(píng)論 0 0

友情鏈接更多精彩內(nèi)容