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