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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章