目標(biāo):使用 golang 開發(fā) web 應(yīng)用
(半)IDE:visual studio code 油狂,如果沒用過就趕緊體驗(yàn)吧绎谦,下一代的開發(fā)工具。我用 visual studio code 寫 rust golang c++ groovy javascript typescript powershell python显歧, 用了就放不下蒙挑。我除了 c++ 還是喜歡用 visual studio 幾乎全用 visual studio code 來寫
visual studio code 提供了對(duì)許多語言的擴(kuò)展
開始今天分享先介紹一位神一般的人物?
TJ Holowaychuk蔗牡,程序員兼藝術(shù)家,Koa嗅剖、Co辩越、Express、jade信粮、mocha黔攒、node-canvas、commander.js等知名開源項(xiàng)目的創(chuàng)建和貢獻(xiàn)者强缘,TJ絕對(duì)是這一兩年node社區(qū)的“弄潮兒”+“精神領(lǐng)袖”督惰。在我學(xué)習(xí) nodejs 時(shí)候才了解到這位大神。
想一想我也是做效果圖和動(dòng)畫的出身的旅掂,和天才 TJ 比起來... 呵呵赏胚。
他在博客上的告別文章,并不意味著他當(dāng)即完全告別node開發(fā)商虐,co和koa這倆大有前途的框架仍會(huì)繼續(xù)維護(hù)觉阅,其他的項(xiàng)目會(huì)轉(zhuǎn)交給別人維護(hù)(言外之意要將其他爛攤子全部丟掉?)秘车。在他的文中典勇,他提到node不再適合當(dāng)下他開發(fā)的軟件了,并且他選擇了Go鲫尊。
所以我也將學(xué)習(xí)重點(diǎn)從 nodejs 移到了 go 上痴柔。如果自己不會(huì)打牌,就隨別人吧疫向。
上代碼咳蔚,先創(chuàng)建一個(gè) go 項(xiàng)目,結(jié)構(gòu)如下圖搔驼。
第一行代碼谈火,
Main 函數(shù)是我們的入口,程序會(huì)從這里開始執(zhí)行舌涨。
引入 net/http 包糯耍,這個(gè)包提供用于創(chuàng)建一個(gè) web 應(yīng)用的方法。
ListenAndServe 方法第一個(gè)參數(shù)為端口號(hào)囊嘉,第二個(gè)參數(shù) nil 表示使用默認(rèn) mux
golang自帶的http.SeverMux路由實(shí)現(xiàn)簡(jiǎn)單,本質(zhì)是一個(gè)map[string]Handler,是請(qǐng)求路徑與該路徑對(duì)應(yīng)的處理函數(shù)的映射關(guān)系温技。
可以添加其他的路由,以及路由對(duì)應(yīng)的方法扭粱。
我們可以自己創(chuàng)建一個(gè)路由服務(wù)來代替使用默認(rèn) mux 服務(wù)
ServeHTTP 函數(shù)名前如果沒有 (p *person) 則說明 ServeHTTP 只是個(gè)函數(shù)舵鳞,但如果有 (p *person) 說明 ServeHTTP 編程了 person 的一個(gè)方法。(p *person) 是 ServeHTTP 的接收者琢蛤。(如下圖)
Golang 為開發(fā)人員提供很多選擇蜓堕,你可以任意配置您的web 服務(wù)抛虏。
*golang中根據(jù)首字母的大小寫來確定可以訪問的權(quán)限。無論是方法名套才、常量迂猴、變量名還是結(jié)構(gòu)體的名稱,如果首字母大寫背伴,則可以被其他的包訪問沸毁;如果首字母小寫,則只能在本包中使用
首先我們需要多引入了 log 和 io 包挂据,他們分別用于打印日志和讀取文件以清。
path 為請(qǐng)求路由端口后內(nèi)容,可作為 ReadFile 訪問文件路徑崎逃。在 golang 中函數(shù)的返回值可為多個(gè)掷倔, ReadFile 返回值為 data(文件中的數(shù)據(jù))和 err 錯(cuò)誤對(duì)象,這點(diǎn)和 nodejs 很像呦个绍。如果 err 為空我們就輸出讀取的文件內(nèi)容勒葱,相反會(huì)輸出 404 錯(cuò)誤頁面
當(dāng)沒有對(duì)應(yīng)文件就輸出 404?
如果我們?cè)?templates? 下放置文件 home.html 那么路由就可以訪問到這個(gè)文件。
大家注意在 golang 中 := 效果 var xxx = 巴柿。我們無需指定變量類型凛虽,但是這種方式僅可用函數(shù)內(nèi)部有效,外部我們是需要指定變量的類型的广恢,如下圖
還有我們函數(shù)的花括號(hào)如果移到下一行的開頭處凯旋,就需要在函數(shù)結(jié)尾處補(bǔ)上 ;分號(hào)結(jié)束符钉迷,這一點(diǎn)大家需要注意一下至非。
運(yùn)行程序時(shí)需要在?? ?go_web_app 根目錄下運(yùn)行?go run .\src\main.go 。否則會(huì)有問題糠聪。如果在 src 目錄下運(yùn)行 go run main.go 會(huì)找不到 templates/home.html