Web服務(wù)器也是一個(gè)應(yīng)用程序,這個(gè)應(yīng)用程序打開了TCP的80端口,通過HTTP協(xié)議和瀏覽器交互。 Python和Go有非常成熟的類庫(kù),可以用很短的程序來(lái)實(shí)現(xiàn)一個(gè)Web服務(wù)器的功能(打開80端口通過HTTP協(xié)議與瀏覽器交互)。
創(chuàng)新互聯(lián)主營(yíng)南江網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),南江h(huán)5小程序制作搭建,南江網(wǎng)站營(yíng)銷推廣歡迎南江等地區(qū)企業(yè)咨詢
適合??蚣茏銐虺墒炝?A Survey of 5 Go Web Frameworks
小型項(xiàng)目你甚至不用框架,用net/http http - The Go Programming Language
常用庫(kù)也成熟了 Top - Go Search
golang的web后端即使不concurrent也比php,ruby,python快很多很多
golang里用concurrent真的非常方便,非常非常快,超大web項(xiàng)目golang scale成本低
如果你想,golang的部署可以比php更方便,使用go get和http.ServeAndListen()可以不用nginx和apache
對(duì)于文件改動(dòng)重新編譯其實(shí)并不是大問題,看pilu/fresh · GitHub,其實(shí)你自己寫shell腳本(也可以直接用go寫,因?yàn)樗旧砭褪窍到y(tǒng)語(yǔ)言)監(jiān)控文件系統(tǒng)改動(dòng)然后自動(dòng)重新build,即使是C/C++的項(xiàng)目這也不是大問題,人們不用C/C++寫web是因?yàn)樗鼈儾皇菍憌eb app的最佳選擇
golang寫的代碼編譯通過后,要比scripting language魯棒,因?yàn)間o compiler強(qiáng)制一些最佳實(shí)踐
前端框架越來(lái)越豐富,前后端分離已經(jīng)是大多數(shù)軟件團(tuán)隊(duì)采取的模式了。vue使用的場(chǎng)景也越來(lái)越多。
go本來(lái)使用template模板來(lái)進(jìn)行前端的表現(xiàn),現(xiàn)在可以用vue來(lái)分擔(dān)很大一部分工作了。
通常直接使用go語(yǔ)言寫后端,然后使用靜態(tài)模板加載渲染前端,前端獲取后端提供的數(shù)據(jù)是使用{{ }}符號(hào),2個(gè)套在一起的花括號(hào)。這個(gè)也是vue使用的數(shù)據(jù)表現(xiàn)方式。
如果go+vue來(lái)協(xié)同工作的話,需要對(duì)vue進(jìn)行一點(diǎn)設(shè)置。比如把{{ }}的方式改為[[ ]]的方式。
首先我們要知道,vue的使用,需要在頁(yè)面中加載vue.js或vue.min.js
純靜態(tài)網(wǎng)頁(yè)使用vue是這樣的(給個(gè)html例子)
然后我們實(shí)現(xiàn)一個(gè)go的簡(jiǎn)單web服務(wù)和模板頁(yè)面
這個(gè)go服務(wù)器通過端口 1989 展示服務(wù)器頁(yè)面,提供了一個(gè)靜態(tài)文件路徑 htmlpage,我們把vue.js和index.html文件都放置在htmlpage路徑里。
go服務(wù)器還用模板給前臺(tái)頁(yè)面提供了一個(gè)News結(jié)構(gòu)的數(shù)據(jù),數(shù)據(jù)包括:Title,Content,Author的值。
在index.html頁(yè)面中,加載vue.js的時(shí)候需要帶上靜態(tài)路徑 htmlpage
在 new 一個(gè) vue 變量的時(shí)候,必須有一句來(lái)設(shè)置包裹數(shù)據(jù)的符號(hào),我們這里設(shè)置這個(gè)符號(hào)為[[ ]]
同時(shí),所有需要由 vue 渲染的數(shù)據(jù),都寫成類似這樣的樣子
在 go + vue 方式下的完整模板文件 index.html
此頁(yè)面中{{ }}包裹的數(shù)據(jù)是由go從后端提供的數(shù)據(jù)( 例如:{{.Title}}),而[[ ]]包裹的數(shù)據(jù),是vue渲染的數(shù)據(jù)。
只是把 Vue里的數(shù)據(jù),改為由go后端提供即可。
好吧,作者已經(jīng)在向月亮示愛了。呵呵 _
運(yùn)行一下程序,看修改模板后的效果。
http包建立Web服務(wù)器
package main
import (
"fmt"
"net/http"
"strings"
"log"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
r.ParseForm() //解析參數(shù),默認(rèn)是不會(huì)解析的
fmt.Println(r.Form) //這些信息是輸出到服務(wù)器端的打印信息
fmt.Println("path", r.URL.Path)
fmt.Println("scheme", r.URL.Scheme)
fmt.Println(r.Form["url_long"])
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
fmt.Fprintf(w, "Hello astaxie!") //這個(gè)寫入到w的是輸出到客戶端的
}
func main() {
http.HandleFunc("/", sayhelloName) //設(shè)置訪問的路由
err := http.ListenAndServe(":9090", nil) //設(shè)置監(jiān)聽的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
上面這個(gè)代碼,我們build之后,然后執(zhí)行web.exe,這個(gè)時(shí)候其實(shí)已經(jīng)在9090端口監(jiān)聽http鏈接請(qǐng)求了。
在瀏覽器輸入
可以看到瀏覽器頁(yè)面輸出了Hello astaxie!
可以換一個(gè)地址試試:
看看瀏覽器輸出的是什么,服務(wù)器輸出的是什么?
在服務(wù)器端輸出的信息如下:
圖3.8 用戶訪問Web之后服務(wù)器端打印的信息
我們看到上面的代碼,要編寫一個(gè)Web服務(wù)器很簡(jiǎn)單,只要調(diào)用http包的兩個(gè)函數(shù)就可以了。
如果你以前是PHP程序員,那你也許就會(huì)問,我們的nginx、apache服務(wù)器不需要嗎?go就是不需要這些,因?yàn)樗苯泳捅O(jiān)聽tcp端口了,做了nginx做的事情,然后sayhelloName這個(gè)其實(shí)就是我們寫的邏輯函數(shù)了,跟php里面的控制層(controller)函數(shù)類似。
如果你以前是Python程序員,那么你一定聽說過tornado,這個(gè)代碼和他是不是很像,對(duì),沒錯(cuò),Go就是擁有類似python這樣動(dòng)態(tài)語(yǔ)言的特性,寫Web應(yīng)用很方便。
如果你以前是Ruby程序員,會(huì)發(fā)現(xiàn)和ROR的/script/server啟動(dòng)有點(diǎn)類似。
文章題目:go語(yǔ)言編寫web服務(wù)器 go語(yǔ)言做網(wǎng)站
文章出自:http://chinadenli.net/article4/ddochoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷推廣、軟件開發(fā)、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站制作、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容