Go語言Http?Server框架實現(xiàn)一個簡單的httpServer
實現(xiàn)一個簡單地httpServer
上一篇文章對http庫的基本使用做了說明,下面來實現(xià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))
}
此時啟動服務(wù)并訪問8080端口,可以看到下面的頁面

但是如果我想同時啟動多個server監(jiān)聽不同的端口該怎么辦? 我們可以從邏輯上抽象出一個Server,可以表示對某個端口進行監(jiān)聽的實體,這樣必要的時候,我們就可以啟動多個Server來監(jiān)聽不同的端口
首先我們來寫一個接口
type Server interface{
//Route 設(shè)定一個路由,命中路由會執(zhí)行handlerFunc的代碼
Route(pattern string handlerFunc http.HandlerFunc)
//Start 用于啟動服務(wù)
Start(address string) error
}
基于http庫實現(xiàn)一個結(jié)構(gòu)體
type sdkHttpSetver struct{
//Name sever的名字,用于標(biāo)記特定的服務(wù)
Name string
}
實現(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)可以同時監(jiān)聽多個端口了
func main(){
server := web.NewSdkHttpServer("my-test-server")
server.Route("/",home)
server.Route("/user",user)
server.Start("8080")
}
雖然我們已經(jīng)對Server進行了抽象,但是在請求處理的過程中仍然存在問題,就比如我們要實現(xiàn)一個用戶注冊的接口

所以我們需要繼續(xù)對Context也就是上下文做一下抽象,這里的Context是我們自定義的Context不是go原生的Context
以上就是Go語言Http Server框架實現(xiàn)一個簡單的httpServer的詳細(xì)內(nèi)容,更多關(guān)于Go Http Server框架的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用gin開發(fā)的golang項目三種開發(fā)模式方式
這篇文章主要介紹了用gin開發(fā)的golang項目三種開發(fā)模式方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
golang 微服務(wù)之gRPC與Protobuf的使用
這篇文章主要介紹了golang 微服務(wù)之gRPC與Protobuf的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
關(guān)于Golang中range指針數(shù)據(jù)的坑詳解
這篇文章主要給大家介紹了關(guān)于Golang中range指針數(shù)據(jù)的坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
Go項目實現(xiàn)優(yōu)雅關(guān)機與平滑重啟功能
無論是優(yōu)雅關(guān)機還是優(yōu)雅重啟歸根結(jié)底都是通過監(jiān)聽特定系統(tǒng)信號,然后執(zhí)行一定的邏輯處理保障當(dāng)前系統(tǒng)正在處理的請求被正常處理后再關(guān)閉當(dāng)前進程,這篇文章主要介紹了Go實現(xiàn)優(yōu)雅關(guān)機與平滑重啟 ,需要的朋友可以參考下2022-10-10
詳解如何在Go中循環(huán)中使用Defer關(guān)鍵字示例詳解
這篇文章主要為大家介紹了詳解如何在Go中循環(huán)中使用Defer關(guān)鍵字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
go如何優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)
這篇文章主要為大家介紹了go優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
golang如何部署到服務(wù)器及應(yīng)注意問題解析
這篇文章主要為大家介紹了golang如何部署到服務(wù)器及應(yīng)注意問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
Go語言實現(xiàn)二進制與十進制互轉(zhuǎn)的示例代碼
這篇文章主要和大家詳細(xì)介紹了Go語言中實現(xiàn)二進制與十進制互相轉(zhuǎn)換的示例代碼,文中的代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05

