1. 程式人生 > >go web開發初探 《Go web程式設計》學習

go web開發初探 《Go web程式設計》學習

本人之前一直學習java、java web,最近開始學習Go語言,所以也想了解一下Go語言中web的開發方式以及執行機制。

在《Go web程式設計》一書第三節中簡要的提到了Go語言中http的執行方式,我這裡是在這個的基礎上更加詳細的梳理一下。

這裡先提一句,本文中展示的原始碼都是在Go安裝目錄下src/net/http/server.go檔案中(除了自己寫的例項程式),如果各位還想理解的更詳細,可以自己再去研究一下原始碼。

《Go web程式設計》3.4節中提到http有兩個核心功能:Conn, ServeMux , 但是我覺得還有一個Handler介面也挺重要的,後邊咱們提到了再說。

先從一個簡單的例項來看一下Go web開發的簡單流程:

12345678910111213141516171819package mainimport ("fmt""log""net/http")func sayHello(w http.ResponseWriter, r *http.Request) {fmt.Println("Hello World!")}func main() {http.HandleFunc("/hello", sayHello)  //註冊URI路徑與相應的處理函式er := http.ListenAndServe(":9090", nil)  // 監聽9090埠,就跟javaweb中tomcat用的8080差不多一個意思吧if er != nil {
log.Fatal("ListenAndServe: ", er)}}

  在瀏覽器執行localhost:9090/hello   就會在命令列或者所用編輯器的輸出視窗 “Hello World!” (這裡為了簡便,就沒往網頁裡寫入資訊)

根據這個簡單的例子,一步一步的分析它是如何執行。

首先是註冊URI與相應的處理函式,這個就跟SpringMVC中的Controller差不多。

1http.HandleFunc("/hello", sayHello)

  來看一下他的原始碼:

123func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
DefaultServeMux.HandleFunc(pattern, handler)}

  裡邊實際是呼叫了DefaultServeMux的HandlerFunc方法,那麼這個DefaultServeMux是啥,HandleFunc又幹了啥呢?

1234567891011121314151617type ServeMux struct {mu    sync.RWMutexm     map[string]muxEntryhosts bool // whether any patterns contain hostnames}type muxEntry struct {explicit boolh        Handlerpattern  string}func NewServeMux() *ServeMux { return &ServeMux{m: make(map[string]muxEntry)} }var DefaultServeMux = NewServeMux()

  事實上這個DefaultServeMux就是ServeMux結構的一個例項(好吧,看名字也看的出來),ServeMux是Go中預設的路由表,裡邊有個一map型別用於儲存URI與處理方法的對應的鍵值對(String,muxEntry),muxEntry中的Handler型別就是對應的方法。

再來看HandleFunc方法:

12345678910111213141516171819202122232425262728293031323334353637383940func 

相關推薦

go web開發初探Go web程式設計學習

本人之前一直學習java、java web,最近開始學習Go語言,所以也想了解一下Go語言中web的開發方式以及執行機制。在《Go web程式設計》一書第三節中簡要的提到了Go語言中http的執行方式,我這裡是在這個的基礎上更加詳細的梳理一下。這裡先提一句,本文中展示的原始碼都

go+react開發簡單的web系統

為了進一步熟悉go語言,我將使用beego框架和react開發一個食譜web應用。 啟動虛擬機器太麻煩,就直接用windows來開發了,windows有git bash工具是一樣的。 首先預設電腦已經安裝好go語言的開發環境。 1.Beego 和 Bee

移動端web開發初探之Vuejs的簡單實戰

參考 細節 重要 進行 標簽 樣式 mob 優化 view 這段時間在做的東西,是北郵人論壇APP的註冊頁。這個註冊頁是內嵌的網頁,因為打算安卓和IOS平臺同時使用。因此實際上就是在做移動端的web開發了。 在這過程中遇到了不少有意思的東西。 DEMO的github地址在這

Java Web開發(五) JavaScript庫jQuery學習(3) jQuery與Ajax的應用(1)

  關於jQuery選擇器的知識這裡就先不介紹了,這裡向大家介紹一種比較厲害的技術,就是jQuery的Ajax應用,哈哈哈,我們當然先了解一些先進的技術啦,之後再為大家介紹jQuery選擇器和其他知識。 現在讓我們進入強大的jQuery的Ajax應用學習中吧。  

《Java Web開發入門很簡單》學習筆記

《Java Web開發入門很簡單》學習筆記 1123 第1章 瞭解Java Web開發領域Java Web主要涉及技術包括:HTML、JavaScript、CSS、JSP、Servlet、JDBC、Ja

記一次《flask web 開發實戰》flask-login學習(不完全的小整理)

前景 主要問題 flask-login 的流程 session,cookie remember_me這個功能 第一步–編寫使用者類 使用者類需要包含四個方法 用於表示使用者的類需要實現這些方法: is_authenticated()

Web開發初探(系統理解Web知識點)

## 一、Web開發介紹 我們看到的網頁通過程式碼來實現的 ,這些程式碼由瀏覽器解釋並渲染成你看到的豐富多彩的頁面效果。 這個瀏覽器就相當於Python的直譯器,專門負責解釋和執行(渲染)網頁程式碼。 寫網頁的程式碼是專門的語言, 主要分為Hmtl 、 CSS 和 JavaScript​, 被稱為網頁開發

Web開發初探之JavaScript 快速入門

> 本文改編和學習自 [A JavaScript Primer For Meteor](https://www.discovermeteor.com/blog/javascript-for-meteor/) 和 MDN Web教程 > > 前文 [Web開發初探](https://www.cnblogs.co

Web開發的發展史---Web開發技術的演變

即使 包括 另一個 dlink 演變 取數據 等待 php 概念 轉自:http://blog.csdn.net/zzzkk2009/article/details/9849431 在接下來的幾個月時間裏,我打算寫一系列關於完整web開發的文章。這第一篇文章雖然有所

Web開發】Mean web開發 01-Express實現MVC模式開發

http scripts send javascrip 模板引擎 指令 開發環境 depend filter 簡介 Mean是JavaScript的全棧開發框架。更多介紹 用Express實現MVC模式開發是Mean Web全棧開發中的一部分。 Express 是一個基於

Web開發典藏大系:Web性能測試實戰詳解 PDF掃描版

場景 測試基礎 學生 應用 測試的 runner 性能測試實例 性能測試實戰 工具 本書主要講解了大數據背景下的Web性能測試的特點和方法,以及使用業內應用非常廣泛的工具――LoadRunner 11進行性能測試的具體技術與技巧。本書理論結合實踐,講解圖文並茂,並且將I

Java Web開發和Python Web開發之間的區別

今天的文章討論了Java Web開發和Python Web開發之間的區別。我不鼓勵我們在這裡從Java Web遷移到Python Web開發。我只是想談談我的感受。它不一定適合所有情況,僅供我們參考。此外,我還建議從事Java Web的人員可以理解Python Web的開發。從另一個角度來看,Java Web

Java Web開發6___包含 Web 資源----RequestDispatcher.include 方法

有時候為了實現程式碼重用,  需要將某些公用的程式碼 和 資料放到一個或幾個Servlet 中, 以供其他的 Servlet 使用,為這實現上述功能, Java Web 專門提供了RequestDispather.include 方法,  在具體使用該方法時,可以首先通過 g

伺服器開發之linux網路程式設計---學習章節(一)

前言:    近期學習了伺服器相關的開發,平常主要擼c的程式,所以就下定決心研究了c的伺服器開發,目的也在與鞏固c的基本知識。詳細分享如下,若有錯誤請指正,希望與大家探討,共同學習進步。                                             

前端程式碼開發規範。web開發規範。web開發注意事項。前端開發如何寫出更規範的程式碼

一、圖片觀看:二、文字描述:1,web開發基本原則:    1.結構html,樣式css,行為js:三者要分離,儘量確保文件和模板只包含HTML結構,樣式都放到樣式表裡,行為都放到腳本里;     2.縮排:統一縮排方式:整體tab /整體空格;     3.檔案編碼:在HT

Web開發原理】web發展歷史

Web的誕生 提到Web,不得不提一個詞就是“網際網路”。Web是World Wide Web的簡稱,中文譯為全球資訊網。“全球資訊網”和我們經常說的“網際網路”是兩個聯絡極其緊密但卻不盡相同的概念。今天“網際網路”三個字已經承載了太多的內涵,提到網際網路,我們通常想到

Web開發典藏大系:Web效能測試實戰詳解 PDF掃描版

本書主要講解了大資料背景下的Web效能測試的特點和方法,以及使用業內應用非常廣泛的工具――LoadRunner 11進行效能測試的具體技術與技巧。本書理論結合實踐,講解圖文並茂,並且將IT技術與生活場景結合起來,生動而又形象。本書共17章,分為5篇。第1篇介紹軟體測試的定義、

web 開發-教程aiohttp.web

廖雪峰老師的web開發教程中:from aiohttp import web def index(request): return web.Response(body=b'<h1>Awesome!!!</h1>')開啟對應的網頁總是直接彈出來

Go語言進行web開發(三) Go中的WebSocket程式設計

8.2 WebSocket WebSocket是HTML5的重要特性,它實現了基於瀏覽器的遠端socket,它使瀏覽器和伺服器可以進行全雙工通訊,許多瀏覽器(Firefox、Google Chrome和Safari)都已對此做了支援。 在WebSocket出現之前,為

go web開發之url路由設計

概述 最近在搞自己的go web開發框架, 反正也沒打算私藏, 所以現在先拿出url路由設計這塊來寫一篇部落格. 做過web開發的都知道, 一個好的url路由可以讓使用者瀏覽器的位址列總有規律可循, 可以讓我們開發的網站更容易讓搜尋引擎收錄, 可以讓我們開發者更加方便的MVC. 我們