golang入坑系列

話接上節,繼續聊。

如果你此時此刻看到了“Hello God, My Golang.”,那麼檢查一下有沒有找到一首勁爆的音樂,旁邊有沒有沏好一杯好茶。 如果有,就關掉音樂喝掉茶吧。

寫代碼是需要一心一意的,耳朵旁邊有音樂,那你到底是留著心聽音樂呢?還是留著心想邏輯呢? 所以,最好停掉音樂專心致志。


golang入坑系列 - 初生牛犢不怕虎


如果停不掉... 那就別停了。 寫代碼心情最重要,無論怎樣,高興就好。 只要嗨起來,你的code就能飛起來!

先生們,女士們。 如果現在棄坑還來得及,因為下面即將開始你真正的Golang佔坑,呸,Golang入坑之旅。


golang入坑系列 - 初生牛犢不怕虎


Golang的庫

就目前稍微有些知名度的編程語言來說,都存在標準庫和第三方庫的說法。 通俗而言,標準庫是官方提供的庫,由官方來維護。 別人只能看不能改,用著不爽也只能不爽著。

如果哪天實在不爽了,就自己寫一個庫來替代官方庫,這個自己寫的庫就是第三方庫。

針對Golang而言,官方庫和第三方庫非常容易識別。

1.官方庫的庫名簡短有力,例如:fmt,net/http,log等等這些非常短的庫名那就是官方庫。

2.第三方庫,又長又不容易記,例如: github.com/julienschmidt/httproute(一個輕量級的網絡路由庫),github.com/andy-zhangtao/gogather/random(自己封裝的自用工具庫)。

  1. 第二標準庫

除了上面兩類庫之外,還有一類特別的庫。這些庫都以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的存在,所以你懂得。。。)

運氣好,一氣呵成。 運氣差,呵呵,出去悶根菸,侃個天,回來在看看運氣值有沒有爆棚。

如果庫升級了怎麼辦?客官,切莫以為庫都是一成不變的。

馬克思說了,世間萬物都是在變化的。


golang入坑系列 - 初生牛犢不怕虎


當第三方庫也發生變化了,在嫻熟的敲一個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之旅還會有一個一個的坑,我會由淺入深,由內而外,由易到難,慢慢的說。所以甭著急,到了後面入了門,我們飛的速度就會變快了。


分享到:


相關文章: