讀前必讀,下面全部內容都是來自這裏。 放到這裏的目的,就是爲了比對一下,哪裏的讀者多。平心而論,一樣的Markdown,博客園排版真心X看,怎麼瞅怎麼X看。(X := '難' || X :='耐' || X := '好' ) 都是原創,不是抄襲。若是真要拿去,也所謂,好歹給我留個名,也不枉費碼字之苦。 您說是否是?git
話接上節,繼續聊。若是你此時此刻看到了「Hello God, My Golang.」,那麼檢查一下有沒有找到一首勁爆的音樂,旁邊有沒有沏好一杯好茶。 若是有,就關掉音樂喝掉茶吧。 寫代碼是須要一心一意的,耳朵旁邊有音樂,那你究竟是留着心聽音樂呢?仍是留着心想邏輯呢? 因此,最好停掉音樂專心致志。 若是不停掉... 那就別停了。 寫代碼心情最重要,不管怎樣,高興就好。 只要嗨起來,你的code就能飛起來!github
先生們,女士們。 若是如今棄坑還來得及,由於下面即將開始你真正的Golang佔坑,呸,Golang入坑之旅。golang
就目前稍微有些知名度的編程語言來講,都存在標準庫和第三方庫的說法。 通俗而言,標準庫是官方提供的庫,有官方來維護。 別人只能看不能改,用着不爽也只能不爽着。若是哪天實在不爽了,就本身寫一個庫來替代官方庫,這個本身寫的庫就是第三方庫。web
針對Golang而言,官方庫和第三方庫很是容易設別。 官方庫的庫名簡短有力,例如:fmt,net/http,log等等這些很是短的庫名那就是官方庫。相對應的是第三方庫,又長又不容易記,例如: github.com/julienschmidt/httproute(一個輕量級的網絡路由庫),github.com/andy-zhangtao/gogather/random(本身封裝的自用工具庫)。編程
除了上面兩類庫以外,還有一類特別的庫,這些庫都以golang.org開頭,例如golang.org/x/build。 這一類庫不常用,因此不在標準庫之列,但又是Golang官方在維護,因此至關於第二標準庫。json
以上三類庫,在使用的時候優先使用標準庫。若是標準庫沒法知足需求,再使用第二標準庫(golang.org/開頭的庫),仍是沒法知足你的須要,再有選擇的使用第三方類庫。尋找第三方庫,當仁不讓的要去github尋找了。但茫茫人海中,有你有我.. (能哼出調的人,就暴露年齡了)。api
呵呵,開個小玩笑,調節一下氣氛。restful
github上面代碼太多了,一頓亂找,效果很差。 因此先去google搜索一下,好比你要處理json,就搜:golang json。 若是你要建立restful API,就搜golang create restful api。 看看過來人推薦的是哪一個庫,而後貨比三家,在github上面哪家庫的star多,就當個死粉擁躉,直接用它。網絡
用? 怎麼用? 往下看!dom
在你安裝好golang以後,標準庫就已經安裝好了。 後面兩類庫怎麼安裝呢? 首先不要奢求把這兩類庫都徹底安裝好,Golang安裝包裏面可沒有"徹底安裝"這一個選項。後兩類是按需安裝,當你須要的時候再安裝。例如此時此刻,須要寫一個web server了,經過標準庫net/http能夠很容易建立一個webserver,但咱們但願能處理Restful API風格的請求,那標準庫就顯得笨拙很差用了。這時,咱們安裝一個第三方庫,好比github.com/julienschmidt/httprouter. 安裝過程很簡單,手把手,跟着我敲完下面的字母,別偷懶哦:
go get github.com/julienschmidt/httprouter
不報錯,就是安裝成功。 裝哪裏了?老鐵猜一猜? 猜對有獎哦~
沒頭緒?返回上一節,找四個字:工做空間(GOPATH). 全部的源碼都保存在GOPATH/src裏面了,因此本身到GOPATH/src/github.com/julienschmidt/httprouter裏面看看,是否是滿滿都是.go源代碼?
如今你只須要記住這一個工具 go get 就行。 仍是那句話,包子要一口一口的吃,粥要一口一口的喝,找嘛急呀,慢慢來。
當你須要一個非標準庫的時候,就嫺熟的敲入go get <庫名> 瀟灑的敲一個回車,而後能不能裝成功就看造化吧(由於GFW的存在,因此你懂得。。。)運氣好,一鼓作氣。 運氣差,呵呵,出去悶根菸,侃個天,回來在看看運氣值有沒有爆棚。
若是庫升級了怎麼辦?客官,切莫覺得庫都是一成不變的。 馬克思說了,世間萬物都是在變化的。 當第三方庫也發生變化了,在嫺熟的敲一個go get -u <庫名>,瀟灑的敲一個回車,而後能不能裝成功就看造化吧(由於GFW的存在,因此你懂得。。。)運氣好,一鼓作氣。 運氣差,呵呵,出去悶根菸,侃個天,回來在看看運氣值有沒有爆棚(此處爲了表示內容的充實,直接複製了上一段✌️).
看到這裏,咱們稍微複習一下。下面三個問題,看你知道不知道(此圖放在個人github中,看不完整就刷新再試):
人生不累,絕對受罪。人,生下來就是爲了瞎折騰的。不折騰的人生,要麼是植物人,要麼就是快死的人。 寫代碼一樣如此,光看不練學不會。這個小章節中,咱們開始建立人生中的第一個Golang庫。
由於是第三方庫,因此起個名字,叫作github.com/user/stringutil,中間的user能夠改爲你的github帳戶名。取好名,建目錄。咱們來建立這個庫:
mkdir $GOPATH/src/github.com/user/stringutil
接着,在該目錄中建立名爲reverse.go
的文件,內容以下:
// stringutil 包含有用於處理字符串的工具函數。 package stringutil // Reverse 將其實參字符串以符文爲單位左右反轉。 func Reverse(s string) string { r := []rune(s) for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 { r[i], r[j] = r[j], r[i] } return string(r) }
能手敲就手敲,實在不能手敲就複製。但出來混的,早晚要還帳,寫代碼尤爲如此。手敲/粘貼完畢後,用 go build
命令來測試該包的編譯。就在$GOPATH/src/github.com/user/stringutil目錄裏面執行,切莫跑錯目錄。
正常狀況下,應該是不報錯的。若是報錯了,就是敲錯字母/粘貼行,再回頭好好檢查檢查。如今你人生的第一個golang庫就建立完畢了,不要懷疑本身,也不要懷疑我,真的!你的第一個Golang庫建立完畢了。
我知道你的問題,How to use this library?(怎麼使用這個庫?) 順着鼠標往下看。
建立一個$GOPATH/src/github.com/user/hello目錄。
mkdir $GOPATH/src/github.com/user/hello
在裏面建立一個main.go,而後手敲或者粘貼下面的代碼:
package main import ( "fmt" "github.com/user/stringutil" ) func main() { fmt.Printf(stringutil.Reverse("!oG ,olleH")) }
執行go build. 看看會不會出來一個hello的二進制文件,執行這個二進制文件
./hello Hello, Go!
若是報錯,那麼檢查一下你的目錄結構是否是這樣的:
src/ github.com/user/ hello/ hello.go # 命令源碼 stringutil/ reverse.go # 包源碼
若是不是,就調整一下。若是是,就看看是否是粘貼錯或者敲錯了代碼。
本章節,是你Golang之旅第一個坑。還好,不深。只到腳踝。深吸一口氣,不要吐出來,慢慢體會要被憋死的感受... 後面的Golang之旅還會有一個一個的坑,我會由淺入深,由內而外,由易到難,慢慢的說。因此甭着急,到了後面入了門,咱們飛的速度就會變快了。