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))
}
此時啟動服務并訪問8080端口,可以看到下面的頁面

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

所以我們需要繼續(xù)對Context也就是上下文做一下抽象,這里的Context是我們自定義的Context不是go原生的Context
以上就是Go語言Http Server框架實現(xiàn)一個簡單的httpServer的詳細內容,更多關于Go Http Server框架的資料請關注腳本之家其它相關文章!
相關文章
Golang實現(xiàn)自定義時間結構體并支持Json&Gorm
因為時區(qū)等問題,很多項目需要自定義時區(qū)和時間格式,所以這篇文章主要為大家介紹了Golang如何實現(xiàn)自定義時間結構體并支持Json&Gorm,希望對大家有所幫助2024-03-03
VsCode搭建Go語言開發(fā)環(huán)境的配置教程
這篇文章主要介紹了在VsCode中搭建Go開發(fā)環(huán)境的配置教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
VSCode1.4 搭建Golang的開發(fā)調試環(huán)境(遇到很多問題)
這篇文章主要介紹了VSCode1.4 搭建Golang的開發(fā)調試環(huán)境(遇到很多問題),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04
Golang 處理浮點數(shù)遇到的精度問題(使用decimal)
本文主要介紹了Golang 處理浮點數(shù)遇到的精度問題,不使用decimal會出大問題,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02

