欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言實(shí)現(xiàn)一個(gè)Http Server框架(二) Server的抽象

 更新時(shí)間:2023年04月28日 09:39:51   作者:upper  
上一篇文章對http庫的基本使用做了說明,這篇文章主要介紹了如何實(shí)現(xiàn)一個(gè)簡單地httpServer,文中代碼示例非常詳細(xì),感興趣的朋友可以參考下

上一篇文章對http庫的基本使用做了說明,下面來實(shí)現(xiàn)一個(gè)簡單地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,可以表示對某個(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
}

實(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)對Server進(jìn)行了抽象,但是在請求處理的過程中仍然存在問題,就比如我們要實(shí)現(xiàn)一個(gè)用戶注冊的接口

所以我們需要繼續(xù)對Context也就是上下文做一下抽象,這里的Context是我們自定義的Context不是go原生的Context

到此這篇關(guān)于Go語言實(shí)現(xiàn)一個(gè)Http Server框架(二) Server的抽象的文章就介紹到這了,更多相關(guān)Go語言Http Server框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go語言限制協(xié)程并發(fā)數(shù)的方案詳情

    go語言限制協(xié)程并發(fā)數(shù)的方案詳情

    一個(gè)線程中可以有任意多個(gè)協(xié)程,但某一時(shí)刻只能有一個(gè)協(xié)程在運(yùn)行,多個(gè)協(xié)程分享該線程分配到的計(jì)算機(jī)資源,接下來通過本文給大家介紹go語言限制協(xié)程的并發(fā)數(shù)的方案詳情,感興趣的朋友一起看看吧
    2022-01-01
  • 深入解析Go語言編程中的遞歸使用

    深入解析Go語言編程中的遞歸使用

    這篇文章主要介紹了Go語言編程中的遞歸使用,是Go語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • 談?wù)揋o 什么時(shí)候會(huì)觸發(fā) GC問題

    談?wù)揋o 什么時(shí)候會(huì)觸發(fā) GC問題

    Go 語言作為一門新語言,在早期經(jīng)常遭到唾棄的就是在垃圾回收(下稱:GC)機(jī)制中 STW(Stop-The-World)的時(shí)間過長。下面文章就對此話題展開,感興趣的小伙伴可以參考下面文章的內(nèi)容
    2021-09-09
  • 對Golang中的FORM相關(guān)字段理解

    對Golang中的FORM相關(guān)字段理解

    這篇文章主要介紹了對Golang中的FORM相關(guān)字段理解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • go語言處理TCP拆包/粘包的具體實(shí)現(xiàn)

    go語言處理TCP拆包/粘包的具體實(shí)現(xiàn)

    TCP的拆包/粘包也算是網(wǎng)絡(luò)編程中一個(gè)比較基礎(chǔ)的問題了,本文主要介紹了go語言處理TCP拆包/粘包,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • golang使用泛型結(jié)構(gòu)體實(shí)現(xiàn)封裝切片

    golang使用泛型結(jié)構(gòu)體實(shí)現(xiàn)封裝切片

    這篇文章主要為大家詳細(xì)介紹了golang使用泛型結(jié)構(gòu)體實(shí)現(xiàn)封裝切片,即封裝切片的增、刪、改、查、長度大小、ForEach(遍歷切片),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-10-10
  • Go系列教程之反射的用法

    Go系列教程之反射的用法

    這篇文章主要介紹了Go系列教程之反射的用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Golang在Mac、Linux、Windows下如何交叉編譯的實(shí)現(xiàn)

    Golang在Mac、Linux、Windows下如何交叉編譯的實(shí)現(xiàn)

    這篇文章主要介紹了Golang在Mac、Linux、Windows下如何交叉編譯的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 在golang中使用Sync.WaitGroup解決等待的問題

    在golang中使用Sync.WaitGroup解決等待的問題

    這篇文章主要介紹了在golang中使用Sync.WaitGroup解決等待的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang并發(fā)編程深入分析

    Golang并發(fā)編程深入分析

    golang中的并發(fā),是函數(shù)相互獨(dú)立運(yùn)行的能力,goroutines是并發(fā)運(yùn)行的函數(shù)。golang提供了goroutines作為并發(fā)處理的一種方式
    2022-11-11

最新評論