Go語(yǔ)言Http?Server框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的httpServer
實(shí)現(xiàn)一個(gè)簡(jiǎn)單地httpServer
上一篇文章對(duì)http庫(kù)的基本使用做了說(shuō)明,下面來(lái)實(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, "這是主頁(yè)")
}
func user(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "這是用戶頁(yè)面")
}
func main() {
http.HandleFunc("/", home)
http.HandleFunc("/user", user)
log.Fatal(http.ListenAndServe(":8080", nil))
}
此時(shí)啟動(dòng)服務(wù)并訪問8080端口,可以看到下面的頁(yè)面

但是如果我想同時(shí)啟動(dòng)多個(gè)server監(jiān)聽不同的端口該怎么辦? 我們可以從邏輯上抽象出一個(gè)Server,可以表示對(duì)某個(gè)端口進(jìn)行監(jiān)聽的實(shí)體,這樣必要的時(shí)候,我們就可以啟動(dòng)多個(gè)Server來(lái)監(jiān)聽不同的端口
首先我們來(lái)寫一個(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庫(kù)實(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語(yǔ)言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)文章
Golang實(shí)現(xiàn)自定義時(shí)間結(jié)構(gòu)體并支持Json&Gorm
因?yàn)闀r(shí)區(qū)等問題,很多項(xiàng)目需要自定義時(shí)區(qū)和時(shí)間格式,所以這篇文章主要為大家介紹了Golang如何實(shí)現(xiàn)自定義時(shí)間結(jié)構(gòu)體并支持Json&Gorm,希望對(duì)大家有所幫助2024-03-03
Go生成base64圖片驗(yàn)證碼實(shí)例(超詳細(xì)工具類)
這段時(shí)間需要使用圖片驗(yàn)證碼庫(kù),下面這篇文章主要給大家介紹了關(guān)于Go生成base64圖片驗(yàn)證碼的相關(guān)資料,文中給出了詳細(xì)的實(shí)例代碼,需要的朋友可以參考下2023-06-06
VsCode搭建Go語(yǔ)言開發(fā)環(huán)境的配置教程
這篇文章主要介紹了在VsCode中搭建Go開發(fā)環(huán)境的配置教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
go?zero微服務(wù)實(shí)戰(zhàn)系服務(wù)拆分
這篇文章主要為大家介紹了go?zero微服務(wù)實(shí)戰(zhàn)系服務(wù)拆分的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
VSCode1.4 搭建Golang的開發(fā)調(diào)試環(huán)境(遇到很多問題)
這篇文章主要介紹了VSCode1.4 搭建Golang的開發(fā)調(diào)試環(huán)境(遇到很多問題),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Golang 處理浮點(diǎn)數(shù)遇到的精度問題(使用decimal)
本文主要介紹了Golang 處理浮點(diǎn)數(shù)遇到的精度問題,不使用decimal會(huì)出大問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

