
第一期
接觸 GO 語言大概一個(gè)多月了,最近項(xiàng)目需要使用 Go 語言進(jìn)行相關(guān)的開發(fā)。所以需要學(xué)習(xí)。
一個(gè)月的接觸大概已經(jīng)知道了 Go 語言的語言特性。接下來就是不斷的練習(xí)和深入特殊特性。
為了更好的總結(jié)和創(chuàng)造刻意練習(xí)的機(jī)會,將Go 語言的相關(guān)文章成體系的學(xué)習(xí),特意簡書開文集,
進(jìn)行 Go 語言的學(xué)習(xí)。
文章相關(guān)說明
一直以來都有一個(gè)特別大的誤區(qū),以為準(zhǔn)備好了才動(dòng)手,這其實(shí)是不對的,因?yàn)槟阕约憾疾幻鞔_什么才叫準(zhǔn)備好,又或者什么時(shí)候準(zhǔn)備動(dòng)手。
項(xiàng)目相關(guān)的人最近也是零基礎(chǔ)學(xué)習(xí) Go 語言, 畢竟多幾年工作經(jīng)驗(yàn),特意觀察他們的學(xué)習(xí)方式和我之前的學(xué)習(xí)方式比對。其實(shí)絕大多數(shù)程序員都不再是拿本很厚的書進(jìn)行啃,從零攻克對新語言的障礙,而是直接奔著解決問題出發(fā),最重要的是整體的設(shè)計(jì)邏輯,而不是語言,待他解決了這個(gè)問題之后,也就慢慢的熟悉了新語言的特性。
比如:
- 如何定義變量,常量
- 如何編寫函數(shù)
- 新語言的基本數(shù)據(jù)結(jié)構(gòu)
- 判斷
- 循環(huán)
- 基本庫的使用
...
為此我專門細(xì)讀了 程序天才 -- 王垠 的文章《如何掌握所有程序語言》,文章中他在反復(fù)強(qiáng)調(diào)[語言特性],即:程序語言的共性。
比如:
- 變量定義
- 算術(shù)運(yùn)算
- for 循環(huán)語句,while 循環(huán)語句
- 函數(shù)定義,函數(shù)調(diào)用
- 遞歸
- 靜態(tài)類型系統(tǒng)
- 類型推導(dǎo)
- lambda 函數(shù)
- 面向?qū)ο?/li>
- 垃圾回收
- 指針?biāo)阈g(shù)
- goto 語句
...
所以今后的學(xué)習(xí)過程,進(jìn)行思維轉(zhuǎn)換,比如學(xué)習(xí)一門新語言該怎么學(xué),如果你非要看書,前期也不該看很厚的書,應(yīng)該選擇一些小冊子之類的介紹新語言的基礎(chǔ)特性,待你熟悉起來的,再進(jìn)行語言的深入學(xué)習(xí)。
這個(gè)文集的文章主要是一些小代碼,即實(shí)現(xiàn)一些很小的功能的函數(shù)集, 又可能是對一個(gè)庫或者包的簡單使用,也可能是教你如何進(jìn)行編寫測試的,也可能是Go 相關(guān)的一些,比如工程的管理,包的管理之類的。
大概就是這樣。
下面開始第一期的正文:
Go 語言環(huán)境的搭建
開始之前,先回顧下一般我們使用其他語言環(huán)境搭建是什么樣的流程,比如Python
- 下載 Python
- 設(shè)置環(huán)境變量
- 安裝集成開發(fā)環(huán)境
- 安裝第三方庫
好,Go 語言的環(huán)境搭建的一般步驟也是如此。
1. 下載
選擇適合操作系統(tǒng)的版本進(jìn)行下載。
2. 設(shè)置環(huán)境變量
主要設(shè)置下面幾個(gè)參數(shù):
- GOROOT : 即安裝Go 的目錄
- GOPATH :即工程目錄
其他設(shè)置默認(rèn)。
如何驗(yàn)證配置正確且可以使用:
go env # 查看設(shè)置的參數(shù)
go version # 查看安裝的 Go 的版本
比如:
GOPATH = C:\Users\wuxiaoshen\go
GOROOT = D:\1_System\2_Installation\G_go
3. 集成開發(fā)環(huán)境
雖然市面上有各種各樣的集成開發(fā)環(huán)境,但我喜歡 Jetbrains 旗下的產(chǎn)品,所有的編程語言都有對應(yīng)的集成開發(fā)環(huán)境,而且熟悉了一個(gè),其他的都可以開箱即用。
集成開發(fā)環(huán)境: GoLand
在集成開發(fā)環(huán)境內(nèi)設(shè)置:GOROOT, GOPATH

4. 工程結(jié)構(gòu)
即 GOPATH 目錄下存在下面三個(gè)文件:
核心是 src 目錄:主要存放第三方包或者自己的源代碼
bin 目錄:主要是編譯生成的二進(jìn)制文件的存放目錄,假如設(shè)置了 GOBIN
pkg 目錄: 編譯、執(zhí)行過程中生成的文件
bin
pkg
src
github.com
yourproject
5. 編寫代碼
即 在GOPATH 目錄下新建一個(gè)文件夾:demo-for-golang
bin
pkg
src
github.com
demo-for-golang
first
one_2018_01_14.go
main
main.go
# one_2018_01_14.go
package first
import (
"fmt"
)
func PrintFirst(){
fmt.Print("這是第一期:環(huán)境搭建。")
}
# main.go
package main
import (
"demo-for-golang/first"
)
func main(){
first.PrintFirst()
}
執(zhí)行 go run main.go 即可打?。?這是第一期: 環(huán)境搭建。
從上面的代碼可以看出 Go 語言的代碼的一般結(jié)構(gòu):
- 包名
- 導(dǎo)入包:不管是你自己寫的文件還是第三方庫 (其實(shí)就是導(dǎo)入文件夾里的文件)
- 編寫函數(shù)
- 程序的入口是主函數(shù):main()
6. 包的組織和管理
下載第三方庫的方法是使用 Go 命令行: go get
比如下載包管理的庫:govendor
go get -u -v github.com/kardianos/govendor
如果你之前的 GOPATH 沒有問題,那么會在GOPATH 的src 目錄下多一個(gè) github.com 的文件夾:下面有這樣一個(gè)文件夾:..\src\github.com\kardianos\govendor 即表示下載 govendor 成功。
正確使用govendor 命令需要將:GOBIN 加入環(huán)境變量中,否則會顯示:bash: govendor: command not found
正確使用govendor 的前提你需要先安裝 git,且你的工程在 src 目錄下:
比如像這樣的結(jié)構(gòu):
bin
pkg
src
github.com
demo-for-golang
進(jìn)入 demo-for-golang 目錄下:
- 執(zhí)行 govendor init
- 執(zhí)行 govendor add +external
即會在當(dāng)前目錄下多出一個(gè) vendor 目錄,里面有一些自動(dòng)生成的文件夾和文件。
這個(gè)工具的實(shí)質(zhì)是:1. go get 第三方庫,src 目錄下會存放下載下來的庫 2. 項(xiàng)目可以只是使用了其中的一些庫 3. govendor 自動(dòng)將項(xiàng)目中使用到的庫從 src 某目錄(一般是gitHub.com 目錄)下把用到的庫拷貝至你的目錄下的vendor 文件夾下
比如:
程序代碼中使用的 Goconvey 這個(gè)第三方庫
按照上面的步驟,最后的結(jié)果大概這樣。

總結(jié)
本文大概講述了 Go 語言環(huán)境的搭建,以及工程目錄,和包管理工具。希望能對你有所啟發(fā)。
重點(diǎn)是:
- 理解 GOPATh
- 理解 GOBIN
- 理解 GOROOT
這幾個(gè)變量值得設(shè)置。
以及:
- Govendor 的使用
- 基本的 go 代碼和工程的結(jié)構(gòu)
最后再以一張圖表示以后創(chuàng)建項(xiàng)目的整體目錄結(jié)構(gòu):

- src 是GOPATH 的路徑
- github.com 是下載的第三方庫的安裝路徑
- demo-for-golang 是自己創(chuàng)建的目錄
以后需要?jiǎng)?chuàng)建目錄就是不斷的在 GOPATH src 目錄下創(chuàng)建文件夾