婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Golang開啟http服務的三種方式

詳解Golang開啟http服務的三種方式

熱門標簽:澳門防封電銷卡 長沙ai機器人電銷 賺地圖標注的錢犯法嗎 福州鐵通自動外呼系統(tǒng) 烏魯木齊人工電銷機器人系統(tǒng) 濮陽自動外呼系統(tǒng)代理 智能電銷機器人營銷 廣東語音外呼系統(tǒng)供應商 地圖標注測試

前言

都說go標準庫實用,Api設計簡潔。這次就用go 標準庫中的net/http包實現(xiàn)一個簡潔的http web服務器,包括三種版本。

v1最簡單版

直接使用http.HandleFunc(partern,function(http.ResponseWriter,*http.Request){})

HandleFunc接受兩個參數(shù),第一個為路由地址,第二個為處理方法。

//v1
func main() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
     w.Write([]byte("httpserver v1"))
    })
    http.HandleFunc("/bye", sayBye)
    log.Println("Starting v1 server ...")
    log.Fatal(http.ListenAndServe(":1210", nil))
 }

func sayBye(w http.ResponseWriter, r *http.Request) {
   w.Write([]byte("bye bye ,this is v1 httpServer"))
}

v2自定義Handler

查看標準庫源碼,v1版本實際上是調(diào)用了handle方法,傳入的HandlerFunc實現(xiàn)了Handler的ServeHTTP方法,實際上是ServeHTTP在做http請求處理。

HandleFunc調(diào)用.png

HandleFunc實現(xiàn)Handler.png

Handler接口定義.png

由此我們可以自定義自己的Handler,v2版本代碼如下:

// v2
func main() {
  mux := http.NewServeMux()
  mux.Handle("/", myHandler{})
  mux.HandleFunc("/bye", sayBye)

  log.Println("Starting v2 httpserver")
  log.Fatal(http.ListenAndServe(":1210", mux))
}
type myHandler struct{}

func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
   w.Write([]byte("this is version 2"))
}
func sayBye(w http.ResponseWriter, r *http.Request) {
   w.Write([]byte("bye bye ,this is v2 httpServer"))
}

v3自定義server配置

前面對Handler開了一次刀,下面我們看看http.ListenAndServe()中有些什么秘密。

ListenAndServe.png

原來這里可以自定義http服務器配置,都在Server這個結(jié)構(gòu)體中,這個對象能配置監(jiān)聽地址端口,配置讀寫超時時間,配置handler,配置請求頭最大字節(jié)數(shù)...,所有稍微改造一下v2的程序得到v3版:

// v3
func main() {
  mux := http.NewServeMux()
  mux.Handle("/", myHandler{})
  mux.HandleFunc("/bye", sayBye)

  server := http.Server{
    Addr:     ":1210",
    WriteTimeout: time.Second * 3,      //設置3秒的寫超時
    Handler:   mux,
  }
  log.Println("Starting v3 httpserver")
  log.Fatal(server.ListenAndServe())
}

type myHandler struct{}

func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  w.Write([]byte("this is version 3"))
}

func sayBye(w http.ResponseWriter, r *http.Request) {
    // 睡眠4秒 上面配置了3秒寫超時,所以訪問 “/bye“路由會出現(xiàn)沒有響應的現(xiàn)象
  time.Sleep(4 * time.Second)       
  w.Write([]byte("bye bye ,this is v3 httpServer"))
}

拓展一下(如何平滑關(guān)閉http服務)

在go1.8中新增了一個新特性,利用Shutdown(ctx context.Context) 優(yōu)雅地關(guān)閉http服務。

文檔中描述:

Shutdown 將無中斷的關(guān)閉正在活躍的連接,然后平滑的停止服務。處理流程如下:

  • 首先關(guān)閉所有的監(jiān)聽;
  • 然后關(guān)閉所有的空閑連接;
  • 然后無限期等待連接處理完畢轉(zhuǎn)為空閑,并關(guān)閉;
  • 如果提供了 帶有超時的Context,將在服務關(guān)閉前返回 Context的超時錯誤;

利用這個特性改造一下v3版本的程序,實現(xiàn)一個關(guān)閉http的提示

// 主動關(guān)閉服務器
var server *http.Server
func main() {
  
 // 一個通知退出的chan
quit := make(chan os.Signal)
signal.Notify(quit, os.Interrupt)

mux := http.NewServeMux()
mux.Handle("/", myHandler{})
mux.HandleFunc("/bye", sayBye)

server = http.Server{
  Addr:     ":1210",
  WriteTimeout: time.Second * 4,
  Handler:   mux,
}

go func() {
  // 接收退出信號
  -quit
  if err := server.Close(); err != nil {
    log.Fatal("Close server:", err)
  }
}()

log.Println("Starting v3 httpserver")
err := server.ListenAndServe()
if err != nil {
  // 正常退出
  if err == http.ErrServerClosed {
    log.Fatal("Server closed under request")
  } else {
    log.Fatal("Server closed unexpected", err)
  }
}
 log.Fatal("Server exited")

}

type myHandler struct{}

func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 w.Write([]byte("this is version 3"))
}

 // 關(guān)閉http
func sayBye(w http.ResponseWriter, r *http.Request) {
   w.Write([]byte("bye bye ,shutdown the server"))   // 沒有輸出
   err := server.Shutdown(nil)
   if err != nil {
    log.([]byte("shutdown the server err"))
   }
 }

嘗試訪問 http://localhost:1210/bye 在控制臺會得到以下提示結(jié)果,平滑關(guān)閉http服務成功:

成功平滑關(guān)閉.png

到此這篇關(guān)于詳解Golang開啟http服務的三種方式的文章就介紹到這了,更多相關(guān)Golang開啟http服務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 解決golang處理http response碰到的問題和需要注意的點
  • 詳解golang中發(fā)送http請求的幾種常見情況
  • 解決golang讀取http的body時遇到的坑
  • golang HTTP 服務器 處理 日志/Stream流的操作

標簽:太原 阿克蘇 貴陽 慶陽 西雙版納 廣西 調(diào)研邀請 德州

巨人網(wǎng)絡通訊聲明:本文標題《詳解Golang開啟http服務的三種方式》,本文關(guān)鍵詞  詳解,Golang,開啟,http,服務,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Golang開啟http服務的三種方式》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解Golang開啟http服務的三種方式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人h精品动漫一区二区三区| 国产精品一区二区在线观看不卡| 91首页免费视频| 欧美体内she精高潮| 日韩美女视频一区二区在线观看| 欧美国产激情二区三区| 亚洲一区日韩精品中文字幕| 麻豆成人久久精品二区三区红| 国产馆精品极品| 欧美视频在线一区二区三区 | 亚洲一区二区影院| 美国一区二区三区在线播放| 99久久er热在这里只有精品15| 欧美裸体一区二区三区| 国产日韩欧美精品在线| 日韩黄色一级片| 欧美国产欧美亚州国产日韩mv天天看完整| 日韩欧美国产综合一区| 久久伊人中文字幕| 国产精品国产三级国产普通话99 | 99vv1com这只有精品| 欧美一区二区三区人| 日韩高清在线观看| 亚洲免费伊人电影| 久久精品国产网站| 欧美怡红院视频| 欧美国产精品中文字幕| 三级欧美在线一区| 欧美电影一区二区| 亚洲国产视频a| 国产成人精品免费一区二区| 欧美午夜不卡在线观看免费| 婷婷中文字幕综合| 亚洲美女在线国产| 韩国视频一区二区| 欧美三级电影网站| 国产精品久久久久久亚洲伦| 九色综合国产一区二区三区| 欧美日韩在线综合| 成人免费小视频| 国产激情视频一区二区在线观看| 欧美猛男gaygay网站| 亚洲婷婷国产精品电影人久久| 国产精品一二三四| 精品久久人人做人人爱| 天天射综合影视| 欧美自拍偷拍午夜视频| 亚洲视频电影在线| 国产成人鲁色资源国产91色综| 欧美va亚洲va在线观看蝴蝶网| 五月天网站亚洲| 色94色欧美sute亚洲13| 99久久99久久精品免费观看 | 亚洲女性喷水在线观看一区| 欧洲人成人精品| 色老头久久综合| 国产精品日产欧美久久久久| 国产999精品久久| 精品不卡在线视频| 欧美日韩精品专区| 亚洲成a人片在线观看中文| 日韩一区二区在线看| 成人avav影音| 日本欧美一区二区在线观看| 久久久久久一级片| 在线观看亚洲专区| 国内成+人亚洲+欧美+综合在线| 亚洲欧美一区二区视频| 日韩三级av在线播放| 国产成人免费视频精品含羞草妖精| 亚洲男帅同性gay1069| 精品国一区二区三区| 色狠狠色噜噜噜综合网| 国产精品一区在线| 日韩成人免费电影| 日韩影院精彩在线| 欧美精品三级日韩久久| 首页国产欧美久久| 91精品久久久久久久91蜜桃| 蜜桃视频一区二区| 在线视频观看一区| 国v精品久久久网| 久久66热偷产精品| 日韩在线一区二区| 亚洲欧美日韩一区二区三区在线观看 | 欧美aaaaaa午夜精品| 亚洲欧美日韩综合aⅴ视频| 久久久久久久久蜜桃| 欧美疯狂做受xxxx富婆| 色综合久久天天| 高清av一区二区| 国产综合色在线视频区| 日韩精品乱码免费| 亚洲亚洲精品在线观看| 一区二区三区精品| 亚洲同性同志一二三专区| 中文字幕第一区综合| 久久久久久久精| 亚洲精品一区二区精华| 精品国产在天天线2019| 欧美一级夜夜爽| 欧美一区二区三区在线看| 欧美日韩亚洲不卡| 欧美日韩中文另类| 欧美日韩你懂的| 欧美精品乱人伦久久久久久| 欧美日韩中文另类| 欧美人与z0zoxxxx视频| 7777精品伊人久久久大香线蕉| 欧美日韩一级二级三级| 欧洲一区二区三区免费视频| 欧美亚洲精品一区| 91福利视频久久久久| 在线看一区二区| 欧美蜜桃一区二区三区| 日韩亚洲欧美综合| 久久夜色精品国产欧美乱极品| 久久久精品黄色| 国产精品久久午夜| 一区二区三区四区精品在线视频 | 国产高清久久久| 国产精品一区二区视频| 国产白丝网站精品污在线入口 | 蜜桃av一区二区| 韩国视频一区二区| 成人av综合在线| 日本精品裸体写真集在线观看| 欧美视频在线不卡| 日韩一区二区麻豆国产| 久久综合久久久久88| 久久精品无码一区二区三区| 国产日韩精品久久久| 中文字幕在线不卡视频| 亚洲自拍偷拍九九九| 日本最新不卡在线| 懂色av一区二区在线播放| 97se亚洲国产综合自在线观| 欧美日韩免费观看一区二区三区| 欧美一区二区私人影院日本| 久久综合精品国产一区二区三区| 国产精品美女久久久久久久| 亚洲第一福利视频在线| 国产美女在线观看一区| 色综合久久久久| 91精品国产综合久久香蕉麻豆| 国产欧美一区二区精品性| 亚洲一区在线观看免费观看电影高清 | 日韩精品欧美精品| 国产sm精品调教视频网站| 欧美天堂一区二区三区| 国产亚洲精品精华液| 亚洲福利视频一区| 国产成人自拍网| 欧美一区二区视频在线观看| 国产精品成人午夜| 韩国欧美一区二区| 欧美最猛性xxxxx直播| 国产亚洲制服色| 午夜精品一区二区三区免费视频 | 99精品国产一区二区三区不卡| 日韩丝袜情趣美女图片| 夜夜精品视频一区二区| 国产91高潮流白浆在线麻豆| 91精品国产乱| 亚洲一区二区精品视频| 国产成人精品网址| 欧美不卡视频一区| 日韩精品一二区| 欧美午夜一区二区三区免费大片| 国产精品女主播av| 国产一区二区三区免费在线观看| 91精品国产91热久久久做人人| 亚洲精品日产精品乱码不卡| 成人少妇影院yyyy| 日韩欧美亚洲一区二区| 性做久久久久久| 在线亚洲+欧美+日本专区| 国产精品色一区二区三区| 国产在线国偷精品免费看| 日韩一区二区三区三四区视频在线观看| 亚洲摸摸操操av| 99精品国产99久久久久久白柏| 中文字幕免费观看一区| 国产精品2024| 久久久久久久综合日本| 国产原创一区二区| 2022国产精品视频| 国产综合色视频| 久久精品亚洲麻豆av一区二区| 经典三级在线一区| 精品久久久久久久久久久久久久久 | 国产精品国产三级国产专播品爱网 | 精品一区二区三区免费视频| 日韩三级视频中文字幕| 免费观看在线色综合| 日韩色视频在线观看| 激情综合色播激情啊| 精品国产乱码久久久久久夜甘婷婷 | 日韩午夜av电影| 精品一区二区三区在线播放 |