使用Golang搭建web服務(wù)的實(shí)現(xiàn)步驟_第1頁(yè)
使用Golang搭建web服務(wù)的實(shí)現(xiàn)步驟_第2頁(yè)
使用Golang搭建web服務(wù)的實(shí)現(xiàn)步驟_第3頁(yè)
使用Golang搭建web服務(wù)的實(shí)現(xiàn)步驟_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第使用Golang搭建web服務(wù)的實(shí)現(xiàn)步驟如何用golang搭建一個(gè)web服務(wù)呢?菜鳥(niǎo)官網(wǎng)的goweb編程教程已經(jīng)介紹了web服務(wù)器的工作原理,這里就不贅述了。

我們先看個(gè)例子:http.go

packagemain

import(

"fmt"

"io"

"log"

"net/http"

funcmain(){

http.HandleFunc("/test",doRequest)//設(shè)置訪問(wèn)路由

err:=http.ListenAndServe(":8000",nil)//設(shè)置監(jiān)聽(tīng)的端口

iferr!=nil{

log.Fatal("ListenAndServe:",err)

funcdoRequest(whttp.ResponseWriter,r*http.Request){

r.ParseForm()//解析url傳遞的參數(shù),對(duì)于POST則解析響應(yīng)包的主體(requestbody)

//fmt.Println(r.Form)//這些信息是輸出到服務(wù)器端的打印信息

//fmt.Println("path",r.URL.Path)

//fmt.Println("scheme",r.URL.Scheme)

//fork,v:=ranger.Form{

//fmt.Println("key:",k)

//fmt.Println("value:",strings.Join(v,""))

fmt.Fprintf(w,"servicestart...")//這個(gè)寫(xiě)入到w的是輸出到客戶端的也可以用下面的io.WriteString對(duì)象

//注意:如果沒(méi)有調(diào)用ParseForm方法,下面無(wú)法獲取表單的數(shù)據(jù)

//query:=r.URL.Query()

varuidstring//初始化定義變量

ifr.Method=="GET"{

uid=r.FormValue("uid")

}elseifr.Method=="POST"{

uid=r.PostFormValue("uid")

io.WriteString(w,"uid="+uid)

}

gorunhttp.go命令運(yùn)行程序。

之后在瀏覽器中輸入地址::8000/testuid=10086,看下結(jié)果。

在main函數(shù)中,我們從net/http包中調(diào)用了一個(gè)http.HandleFucn函數(shù)來(lái)注冊(cè)一個(gè)處理函數(shù)

這個(gè)函數(shù)接受兩個(gè)參數(shù)。第一個(gè)是字符串,這個(gè)就是進(jìn)行路由匹配,我這里是/test路由。第二個(gè)參數(shù)是一個(gè)func(ResponseWriter,Request)的簽名。

我們的doRequest函數(shù)就是這樣的簽名。下一行中的http.ListenAndServe(:8000,nil),表示監(jiān)聽(tīng)localhost的8000端口,暫時(shí)忽略掉nil。

在doRequest函數(shù)中我們有兩個(gè)參數(shù),一個(gè)是http.ResponseWriter類型的。它類似響應(yīng)流,實(shí)際上是一個(gè)接口類型。

第二個(gè)是http.Request類型,類似于HTTP請(qǐng)求。我們不必使用所有的參數(shù),如果只是簡(jiǎn)單的輸出,那么我們只需要使用http.ResponseWriter,io.WriteString,將會(huì)把輸出流寫(xiě)入數(shù)據(jù)。

我們?cè)偕晕⒏南?,大家?qǐng)注意修改的部分(這里我們只調(diào)整main函數(shù)部分代碼)

funcmain(){

mux:=http.NewServeMux()

mux.HandleFunc("/test",doRequest)

err:=http.ListenAndServe(":8000",mux)//設(shè)置監(jiān)聽(tīng)的端口

iferr!=nil{

log.Fatal("ListenAndServe:",err)

}

這個(gè)例子中,我們不再在函數(shù)http.ListenAndServe使用nil了。這個(gè)例子跟上面的例子其實(shí)是一樣的。使用http注冊(cè)hanlder函數(shù)模式就是用的ServeMux。

我們?cè)僬{(diào)整下看下更復(fù)雜的例子:

packagemain

import(

"fmt"

"io"

"log"

"net/http"

varmuxmap[string]func(http.ResponseWriter,*http.Request)

funcmain(){

server:=http.Server{

Addr:":8000",

Handler:doHandler{},

mux=make(map[string]func(http.ResponseWriter,*http.Request))

mux["/test"]=doRequest

err:=server.ListenAndServe()

iferr!=nil{

log.Fatal("ListenAndServe:",err)

typedoHandlerstruct{}

func(*doHandler)ServeHTTP(whttp.ResponseWriter,r*http.Request){

ifres,ok:=mux[r.URL.String()];ok{

res(w,r)

return

io.WriteString(w,"urlparams:"+r.URL.String())

funcdoRequest(whttp.ResponseWriter,r*http.Request){

r.ParseForm()//解析url傳遞的參數(shù),對(duì)于POST則解析響應(yīng)包的主體(requestbody)

fmt.Fpri

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論