Go語言第一篇 --- 環(huán)境配置

可愛的土撥鼠.png

前言

在我們接觸一門新的語言的時候祖很,并不著急馬上去學(xué)習(xí)它的語法壮啊,應(yīng)該從一個全局的視角來看看我們接下來要學(xué)的語言時一個什么樣的語言旺拉,值不值得我們?nèi)W(xué)产上,它和我們現(xiàn)有的技術(shù)棧有什么區(qū)別,是否能夠解決技術(shù)痛點蛾狗,以上這幾點是我覺得學(xué)習(xí)之前先要了解的晋涣。

Go 語言目前還是比較新的語言,它是一種自帶并發(fā)沉桌、具有垃圾回收以及快速編譯的靜態(tài)類型語言谢鹊,它結(jié)合了解釋型語言的游刃有余,動態(tài)類型語言的開發(fā)效率留凭,以及靜態(tài)類型的安全性佃扼。同 Java 相比,Go語言有很多不同的地方蔼夜,比如一開始的公有變量和私有變量的規(guī)范松嘶,Go語言中變量大寫就是公有變量,小寫就是私有變量(error除外)挎扰,Go 內(nèi)置了線程和隊列翠订,實現(xiàn)起來比 Java 簡單很多,再比如 Go 的異常處理沒有一大推try/catch遵倦,等等就不一列舉尽超。

Go 語言是 Google 團隊的大佬精心打造出來的,成員之一就有大名鼎鼎的 Unix 操作系統(tǒng)的創(chuàng)造者 Ken Thompson梧躺,C 語言就是他和已經(jīng)過世的李奇一起發(fā)明的似谁。接下來讓我們一起走進 Go 語言的世界吧!

1掠哥、環(huán)境配置

在我們學(xué)習(xí)一門新的語言時巩踏,通常我們會先寫一個 Hello World,Go 語言的 Hello World 如下:

package main

import "fmt"

func main() {
  fmt.Println("hello world!")
}

看起來是不是很簡單续搀?我們使用命令

go run main.go

就會得到我們想要的 hello world! 這個時候我已經(jīng)迫不及待的想要自己試試了塞琼,首先我們需要按照 Go 語言的安裝包然后再配置一下 GOPATH 環(huán)境變量,其實這里的 GOPATH 環(huán)境變量也就是你的 workspace禁舷。

1.1 Go 語言安裝

我們根據(jù)自己的機器操作系統(tǒng)選擇相應(yīng)的開發(fā)工具包彪杉,比如你的是Windows 64位的,就選擇windows-amd64的工具包牵咙;是Linux 32位的就選擇linux-386的工具包派近。可以自己查看下自己的操作系統(tǒng)洁桌,然后選擇渴丸,我這邊選擇 Mac 版本的下載就可以了。

Mac 安裝 Go

Mac 下安裝可以直接用 homebrew 或者 官網(wǎng)下載

brew install go

Mac 會默認給你配置好 GOPATH另凌,如果不喜歡可以自己修改谱轨,我的目錄是 /Users/sumin/workspace/dev/golang,接下來我們配置環(huán)境變量途茫,在終端輸入 vim .bash_profile碟嘴,然后將一下添加進去后保存退出,并執(zhí)行 source .bash_profile

export GOPATH="/Users/sumin/workspace/dev/golang"
export GOBIN="${GOPATH}/bin"
export PATH="${PATH}:${GOPATH}:${GOPATH}/bin"

然后終端輸入

go version

輸出對應(yīng)的版本號表示安裝成功

go version go1.11.1 darwin/amd64

以上是針對 Mac 的環(huán)境安裝教程囊卜,Linux 和 Mac 都是基于 Unix 娜扇,命令這一塊基本差不多,不過 Linux 更 geek 一些栅组,更偏向于命令行操作雀瓢,比如下載下來的壓縮包需要手動解壓,Linux 中環(huán)境變量的配置和 Mac 稍有不同玉掸,Linux 下又兩個文件可以配置刃麸,其中 /etc/profile 是針對所有用戶都有效的;$HOME/.profile 是針對當(dāng)前用戶有效的司浪,可以根據(jù)自己的情況選擇泊业。

Windows 安裝 Go

首先還是從官網(wǎng)下載相應(yīng)系統(tǒng)的包把沼,解壓到自己選的目錄下,我的是 F:\Go\吁伺, 然后開始配置環(huán)境變量饮睬,如圖所示

image.png

在系統(tǒng)變量中新建 GOROOT,變量值是我們剛剛安裝的路徑篮奄;
修改PATH系統(tǒng)變量捆愁,在變量值最后添加 %GOROOT%\bin 路徑;
最后配置工作目錄 GOPATH,這是我們存放源碼的地方窟却,如圖是我選擇的路徑昼丑,這個隨個人喜好。

同樣終端輸入

go version

輸出對應(yīng)的版本號表示安裝成功

go version go1.11.2 windows/amd64

接下來設(shè)置設(shè)置我們 GOPATH 下的 src 文件夾下新建如下文件夾

├── bin
├── pkg
└── src
  • bin 文件夾存放 go install 生成的可執(zhí)行文件夸赫,當(dāng)我們把 GOPATH/bin 加入到 PATH 后菩帝,我們可以再終端的任意位置直接執(zhí)行 go 文件了
  • pkg 文件夾是存在go編譯生成的文件
  • src存放的是我們的go源代碼,不同工程項目的代碼以包名區(qū)分

當(dāng)我們在終端輸入 go env 查看編譯環(huán)境:

image.png

其中有幾個重要的參數(shù)需要我們注意:

  • GOOS :目標(biāo)操作系統(tǒng)憔足,當(dāng)前我的系統(tǒng)是 amd64 位胁附,這個值根據(jù)你的操作系統(tǒng)決定
  • GOBIN : 存放可執(zhí)行文件的目錄的絕對路徑
  • GOEXE : 當(dāng)前系統(tǒng)可執(zhí)行文件的后綴
  • GOPATH : 工作區(qū)目錄的絕對路徑,就是我剛剛設(shè)置的工作路徑
  • GOROOT : Go語言的安裝目錄的絕對路徑

1.2 Go 命令

接下來我們看一下 Go 有哪些命令

Go 命令.png

簡單的過一下滓彰,我們常用的一般也就幾條控妻,如

go build     用于編譯代碼
go run       并運行 Go 程序
go doc       查看 Go 文檔,但是需要安裝相關(guān)插件
go version   查看 Go 當(dāng)前的版本
go clean     移除當(dāng)前源碼包和關(guān)聯(lián)源碼包里面編譯生成的文件
go fmt       格式化 Go 文件揭绑,gofmt -w -l src 可以格式化整個項目
go get       獲取遠程包弓候,該命令內(nèi)部執(zhí)行了兩步,第一步是下載源碼包他匪,第二步是執(zhí)行g(shù)o install
go install   生成可執(zhí)行文件
...

詳細命令可參考官方文檔 Here

2菇存、Go Package

Go 語言同 Java 一樣都是有包的概念,這也是一種模塊化的方式組織代碼邦蜜,在 Go 語言中依鸥,包也是類似的概念,它是把我們的 Go 文件組織起來悼沈,可以方便進行歸類贱迟、復(fù)用等目的。比如 Go 內(nèi)置的 net 包

net
├── http
├── internal
├── mail
├── rpc
├── smtp
├── testdata
├── textproto
└── url

以上是 net 包的一個目錄結(jié)構(gòu)絮供,net 本身是一個包衣吠,net 目錄下的 http 又是一個包。從這個大家可以看到壤靶,Go 語言的包其實就是我們計算機里的目錄缚俏,或者叫文件夾,通過它們進行目錄結(jié)構(gòu)和文件組織,Go 只是對目錄名字做了一個翻譯忧换,叫"包"而已恬惯。比如這里的 net 包其實就是 net 目錄,http 包其實就是 http 目錄包雀,這也是 Go 語言中的一個命名習(xí)慣宿崭,包名和文件所在的目錄名是一樣的。

2.1 包的命名

首先我們在前面的 Hello World 中聲明了一個 main 包才写,這就和 Java 的 main 函數(shù)一個意思,告訴程序我是入口函數(shù)奖蔓,這里 Go 會把聲明了 main 的包編譯為一個可執(zhí)行程序赞草,并且同一個項目里只有一個入口文件。

Go 語言中的包名一般遵循小寫吆鹤、和所在目錄同名的原則厨疙。當(dāng)我們只有一個項目的時候我們可以直接把文件寫在 src 目錄下,如果我們有多個項目同時存在疑务,我們就要通過包組織我們的代碼了沾凄,官網(wǎng)是推薦使用你個人的 github.com,這一點同 Java 中類似知允。

這里再看下上面的 Hello World 程序

  • 首先我們引入了 package main撒蟀,這里 package 是一個關(guān)鍵字,定義一個包温鸽,和 Java 里的 package 一樣保屯,也是模塊化的關(guān)鍵。
  • main 包是一個特殊的包名涤垫,表示程序執(zhí)行的入口姑尺,而不是一個庫。
  • import 也是一個關(guān)鍵字蝠猬,表示要引入的包切蟋,和 Java 的 import 關(guān)鍵字一樣,引入后才可以使用它榆芦。
  • fmt 是一個包名柄粹,這里表示要引入 fmt 這個包,這樣我們就可以使用它的函數(shù)了歧杏。
  • Println 是 fmt 包里的函數(shù)镰惦,和 Java 里的 system.out.println 作用類似,這里注意 Println 是大寫的犬绒,至于為啥呢旺入,我們接下來再說。

2.2 包的導(dǎo)入

要想使用一個包,必須先導(dǎo)入它才可以使用茵瘾,Go 語言提供了 import 關(guān)鍵字來導(dǎo)入一個包礼华,這個關(guān)鍵字告訴 Go 編譯器到磁盤的哪里去找要想導(dǎo)入的包,所以導(dǎo)入的包必須是一個全路徑的包拗秘,也就是包所在的位置圣絮。注意:引用了必須使用,否則會報錯雕旨。

import "fmt"

在我們的 Hello World 中我們打印了一段話扮匠,引入了 fmt 包,如果引入多個我們可以如下使用

import "fmt"
import "github.com/sumin/test"  // 遠程包引入

// 推薦下面的寫法
import (
    "fmt"
    "github.com/sumin/test"
)

2.3 包的別名

在我們開發(fā)過程中有可能會出現(xiàn)重復(fù)的情況(盡量避免)凡涩,這個時候我們可以給其中一個設(shè)置別名使用棒搜,在包的左側(cè)引入,編譯器會自動識別該別名活箕。

package main

import (
    "fmt"
    su_fmt "github.com/sumin/fmt"
)

func main() {
    fmt.Println()
    su_fmt.Println()
}

還有上面那個問題力麸,Go 語言規(guī)定導(dǎo)入的包必須引用,這樣確實避免了我們引用很多無用的包增加代碼量育韩,對于維護簡直友好度MAX克蚂!但是有的時候我們需要導(dǎo)入一個包執(zhí)行包里的 init 函數(shù)而不想引用它,這個時候可以使用 Go 內(nèi)置的空白標(biāo)識符 _筋讨,還是拿上面的代碼舉例

package main

import (
    "fmt"
    _ "github.com/sumin/fmt"
)

func main() {
    fmt.Println()
}

3埃叭、 編輯器

工欲善其事必先利其器,我們使用一個順手的編輯器開發(fā)也會省心不少版仔。不過 Go 不怎么挑剔編輯器游盲,它本身采用的是 UTF-8 的文本文件存放源代碼,所以原則上你可以使用任何文本編輯器蛮粮。

對于我這種新手來說 Jetbrains idea + Go 插件最省心益缎,當(dāng)然也有專門支持 Go 語言的 GoLand 下載地址

同時也推薦使用 vscode,內(nèi)置 Go 全家桶然想,輕便簡潔莺奔,主要是好看关翎,不過需要手動下載 Go 插件继榆。

小結(jié)

第一篇關(guān)于 Go 的準(zhǔn)備工作就到這里吧,大概講了的 Go 開發(fā)安裝配置屈暗、環(huán)境搭建妨蛹、Go 相關(guān)命令屏富,后面還介紹了 Go 的安裝和包管理以及編輯器這一塊,接下來會繼續(xù)學(xué)習(xí) Go 的基礎(chǔ)語法和庫蛙卤,加油~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狠半,一起剝皮案震驚了整個濱河市噩死,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌神年,老刑警劉巖已维,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異已日,居然都是意外死亡垛耳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門飘千,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堂鲜,“玉大人,你說我怎么就攤上這事占婉∨葑欤” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵逆济,是天一觀的道長。 經(jīng)常有香客問我磺箕,道長奖慌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任松靡,我火速辦了婚禮简僧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雕欺。我一直安慰自己岛马,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布屠列。 她就那樣靜靜地躺著啦逆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笛洛。 梳的紋絲不亂的頭發(fā)上夏志,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音苛让,去河邊找鬼沟蔑。 笑死,一個胖子當(dāng)著我的面吹牛狱杰,可吹牛的內(nèi)容都是我干的瘦材。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼仿畸,長吁一口氣:“原來是場噩夢啊……” “哼食棕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤宣蠕,失蹤者是張志新(化名)和其女友劉穎例隆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抢蚀,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡镀层,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了皿曲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唱逢。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屋休,靈堂內(nèi)的尸體忽然破棺而出坞古,到底是詐尸還是另有隱情,我是刑警寧澤劫樟,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布痪枫,位于F島的核電站,受9級特大地震影響叠艳,放射性物質(zhì)發(fā)生泄漏奶陈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一附较、第九天 我趴在偏房一處隱蔽的房頂上張望吃粒。 院中可真熱鬧,春花似錦拒课、人聲如沸徐勃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僻肖。三九已至,卻和暖如春扎酷,著一層夾襖步出監(jiān)牢的瞬間檐涝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工法挨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谁榜,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓凡纳,卻偏偏與公主長得像窃植,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荐糜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容