自己寫go web框架第一天(基礎知識)

2021-10-07 23:16:51 字數 3117 閱讀 1404

go語言內建net/http庫,封裝http程式設計的基礎介面,啟動http特別簡單

建立乙個main檔案

執行**在開啟瀏覽器,檢視

我們只設定了乙個路由 「/」 ,繫結了indexhandler,匹配路由呼叫函式。

http.listenandserve()函式有兩個引數,第乙個為監聽位址,第二個為handler,如果為nil那麼呼叫預設handler,我們也可以自定義handler,啟動web服務。

go語言net/http庫中

handler為乙個介面型別,那麼新建乙個結構體,實現servehttp()方法就建立了乙個handler,試一下吧!

)//新建乙個結構體

type engine struct {}

//實現servehttp方法

//啟動服務

}瀏覽器驗證:

我們定義了乙個空的結構體engine,實現了servehttp方法,這個方法有2個引數,第二個引數是 request ,該物件包含了該http請求的所有的資訊,比如請求位址、header和body等資訊;第乙個引數是 responsewriter ,利用 responsewriter 可以構造針對該請求的響應。

在 main 函式中,我們給 listenandserve 方法的第二個引數傳入了剛才建立的engine例項。至此,我們走出了實現web框架的第一步,即,將所有的http請求轉向了我們自己的處理邏輯,**的執行結果與之前的是一致的。

目錄說明

}埠位址定義為「8080」

)//定義函式為handlerfunc型別

//定義engine結構體

type engine struct

//實現servehttp方法 根據請求的方法及路徑來匹配handler

}//外部呼叫框架入口

func new() *engine

}//框架新增路由

func (engine *engine) addroute(method string, pattern string, handler handlerfunc)

//匹配get方法

func (engine *engine) get(pattern string, handler handlerfunc)

//匹配post方法

func (engine *engine) post(pattern string, handler handlerfunc)

//啟動服務

func (engine *engine) run(addr string) (err error)

我們重點介紹一下這部分的實現。

首先定義了型別handlerfunc,這是提供給框架使用者的,用來定義路由對映的處理方法。我們在engine中,新增了一張路由對映表router,key 由請求方法和靜態路由位址構成,例如get-/、get-/hello、post-/hello,這樣針對相同的路由,如果請求方法不同,可以對映不同的處理方法(handler),value 是使用者對映的處理方法。

當使用者呼叫(*engine).get()方法時,會將路由和處理方法註冊到對映表 router 中,(*engine).run()方法,是 listenandserve 的包裝。

engine實現的 servehttp 方法的作用就是,解析請求的路徑,查詢路由對映表,如果查到,就執行註冊的處理方法。如果查不到,就返回 404 not found 。

執行go run main.go,

啟動瀏覽器驗證:

至此,框架原型出來了,慢慢完善!

android基礎 第一天

一 android體系結構 密碼 d7g8 二 兩種虛擬機器的比較 密碼 8gyf 三 sdk介紹 密碼 xqam 四 eclipse環境搭建 密碼 yt4z 五 模擬器的介紹 密碼 j7wg 六 第乙個android專案 上 密碼 jnz1 七 第乙個android專案 下 密碼 i6td 八 a...

Vue基礎第一天

foreach function value,index 4 1.filter 過濾器 filter function item,index let arr 1,2,3,4,5,arr.filter function item,index 4 2.map 對映 對於陣列的對映map function...

js基礎第一天

js的介紹 js是什麼 js是一門指令碼語言 解釋性語言 動態型別語言 基於物件語言 編譯語言 需要把 翻譯成計算機所認知的二進位制語言,才能夠執行 指令碼語言 不需要編譯,直接執行 常見的指令碼語言 t sql,cmd js的作用 解決使用者和瀏覽器之間的互動問題 的寫法 宣告乙個物件 var o...