Go語言Http?Server框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的httpServer
實(shí)現(xiàn)一個(gè)簡(jiǎn)單地httpServer
上一篇文章對(duì)http庫的基本使用做了說明,下面來實(shí)現(xiàn)一個(gè)簡(jiǎn)單地httpServer
package main import ( "fmt" "log" "net/http" ) func home(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "這是主頁") } func user(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "這是用戶頁面") } func main() { http.HandleFunc("/", home) http.HandleFunc("/user", user) log.Fatal(http.ListenAndServe(":8080", nil)) }
此時(shí)啟動(dòng)服務(wù)并訪問8080端口,可以看到下面的頁面
但是如果我想同時(shí)啟動(dòng)多個(gè)server監(jiān)聽不同的端口該怎么辦? 我們可以從邏輯上抽象出一個(gè)Server,可以表示對(duì)某個(gè)端口進(jìn)行監(jiān)聽的實(shí)體,這樣必要的時(shí)候,我們就可以啟動(dòng)多個(gè)Server來監(jiān)聽不同的端口
首先我們來寫一個(gè)接口
type Server interface{ //Route 設(shè)定一個(gè)路由,命中路由會(huì)執(zhí)行handlerFunc的代碼 Route(pattern string handlerFunc http.HandlerFunc) //Start 用于啟動(dòng)服務(wù) Start(address string) error }
基于http庫實(shí)現(xiàn)一個(gè)結(jié)構(gòu)體
type sdkHttpSetver struct{ //Name sever的名字,用于標(biāo)記特定的服務(wù) Name string }
實(shí)現(xiàn)Server接口
func (s *sdkHttpServer) Route(pattern string,handlerFunc http.HandlerFunc){ http.HandleFunc(pattern,handlerFunc) } func (s *sdkHttpServer) Start(address string) error{ http.ListenAndServer(address,nil) } func NewSdkHttpServer(name string) Server { return &sdkHttpServer{ Name:name, } }
現(xiàn)在我們已經(jīng)可以同時(shí)監(jiān)聽多個(gè)端口了
func main(){ server := web.NewSdkHttpServer("my-test-server") server.Route("/",home) server.Route("/user",user) server.Start("8080") }
雖然我們已經(jīng)對(duì)Server進(jìn)行了抽象,但是在請(qǐng)求處理的過程中仍然存在問題,就比如我們要實(shí)現(xiàn)一個(gè)用戶注冊(cè)的接口
所以我們需要繼續(xù)對(duì)Context也就是上下文做一下抽象,這里的Context是我們自定義的Context不是go原生的Context
以上就是Go語言Http Server框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的httpServer的詳細(xì)內(nèi)容,更多關(guān)于Go Http Server框架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用gin開發(fā)的golang項(xiàng)目三種開發(fā)模式方式
這篇文章主要介紹了用gin開發(fā)的golang項(xiàng)目三種開發(fā)模式方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01golang 微服務(wù)之gRPC與Protobuf的使用
這篇文章主要介紹了golang 微服務(wù)之gRPC與Protobuf的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02關(guān)于Golang中range指針數(shù)據(jù)的坑詳解
這篇文章主要給大家介紹了關(guān)于Golang中range指針數(shù)據(jù)的坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02Go項(xiàng)目實(shí)現(xiàn)優(yōu)雅關(guān)機(jī)與平滑重啟功能
無論是優(yōu)雅關(guān)機(jī)還是優(yōu)雅重啟歸根結(jié)底都是通過監(jiān)聽特定系統(tǒng)信號(hào),然后執(zhí)行一定的邏輯處理保障當(dāng)前系統(tǒng)正在處理的請(qǐng)求被正常處理后再關(guān)閉當(dāng)前進(jìn)程,這篇文章主要介紹了Go實(shí)現(xiàn)優(yōu)雅關(guān)機(jī)與平滑重啟 ,需要的朋友可以參考下2022-10-10詳解如何在Go中循環(huán)中使用Defer關(guān)鍵字示例詳解
這篇文章主要為大家介紹了詳解如何在Go中循環(huán)中使用Defer關(guān)鍵字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09go如何優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)
這篇文章主要為大家介紹了go優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05golang如何部署到服務(wù)器及應(yīng)注意問題解析
這篇文章主要為大家介紹了golang如何部署到服務(wù)器及應(yīng)注意問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Go語言實(shí)現(xiàn)二進(jìn)制與十進(jìn)制互轉(zhuǎn)的示例代碼
這篇文章主要和大家詳細(xì)介紹了Go語言中實(shí)現(xiàn)二進(jìn)制與十進(jìn)制互相轉(zhuǎn)換的示例代碼,文中的代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05