golang 開發後端基礎(1)
目標:使用 golang 開發 web 應用
(半)IDE:visual studio code ,如果沒用過就趕緊體驗吧,下一代的開發工具。我用 visual studio code 寫 rust golang c++ groovy javascript typescript powershell python, 用了就放不下。我除了 c++ 還是喜歡用 visual studio 幾乎全用 visual studio code 來寫

visual studio code 提供了對許多語言的擴充套件

開始今天分享先介紹一位神一般的人物

TJ Holowaychuk ,程式設計師兼藝術家,Koa、Co、Express、jade、mocha、node-canvas、commander.js等知名開源專案的建立和貢獻者,TJ絕對是這一兩年node社群的“弄潮兒”+“精神領袖”。在我學習 nodejs 時候才瞭解到這位大神。
想一想我也是做效果圖和動畫的出身的,和天才 TJ 比起來... 呵呵。
他在部落格上的告別文章,並不意味著他當即完全告別node開發,co和koa這倆大有前途的框架仍會繼續維護,其他的專案會轉交給別人維護(言外之意要將其他爛攤子全部丟掉?)。在他的文中,他提到node不再適合當下他開發的軟體了,並且他選擇了Go。
所以我也將學習重點從 nodejs 移到了 go 上。如果自己不會打牌,就隨別人吧。

上程式碼,先建立一個 go 專案,結構如下圖。

第一行程式碼,

Main 函式是我們的入口,程式會從這裡開始執行。
引入 net/http 包,這個包提供用於建立一個 web 應用的方法。
ListenAndServe 方法第一個引數為埠號,第二個引數 nil 表示使用預設 mux
golang自帶的http.SeverMux路由實現簡單,本質是一個map[string]Handler,是請求路徑與該路徑對應的處理函式的對映關係。

可以新增其他的路由,以及路由對應的方法。


我們可以自己建立一個路由服務來代替使用預設 mux 服務

ServeHTTP 函式名前如果沒有 (p *person) 則說明 ServeHTTP 只是個函式,但如果有 (p *person) 說明 ServeHTTP 程式設計了 person 的一個方法。(p *person) 是 ServeHTTP 的接收者。(如下圖)
Golang 為開發人員提供很多選擇,你可以任意配置您的web 服務。
*golang中根據首字母的大小寫來確定可以訪問的許可權。無論是方法名、常量、變數名還是結構體的名稱,如果首字母大寫,則可以被其他的包訪問;如果首字母小寫,則只能在本包中使用


首先我們需要多引入了 log 和 io 包,他們分別用於列印日誌和讀取檔案。
path 為請求路由埠後內容,可作為 ReadFile 訪問檔案路徑。在 golang 中函式的返回值可為多個, ReadFile 返回值為 data(檔案中的資料)和 err 錯誤物件,這點和 nodejs 很像呦。如果 err 為空我們就輸出讀取的檔案內容,相反會輸出 404 錯誤頁面

當沒有對應檔案就輸出 404

如果我們在 templates 下放置檔案 home.html 那麼路由就可以訪問到這個檔案。


大家注意在 golang 中 := 效果 var xxx = 。我們無需指定變數型別,但是這種方式僅可用函式內部有效,外部我們是需要指定變數的型別的,如下圖

還有我們函式的花括號如果移到下一行的開頭處,就需要在函式結尾處補上 ;分號結束符,這一點大家需要注意一下。

執行程式時需要在 go_web_app 根目錄下執行 go run .\src\main.go 。否則會有問題。如果在 src 目錄下執行 go run main.go 會找不到 templates/home.html