1. 程式人生 > >《Go語言入門》第一個Go語言Web程式——簡單的Web伺服器

《Go語言入門》第一個Go語言Web程式——簡單的Web伺服器

概述

Go語言Web開發入門必修課:第一個Go語言Web程式——簡單的Web伺服器。

與其它Web後端語言不同,Go語言需要自己編寫Web伺服器

有關本地環境的搭建與基礎學習,請參考:

Web伺服器程式碼

Google在http://chart.apis.google.com 上提供了一個將表單資料自動轉換為圖表的服務。不過,該服務很難互動, 因為你需要將資料作為查詢放到URL中。此程式為一種資料格式提供了更好的的介面: 給定一小段文字,它將呼叫圖表伺服器來生成二維碼(QR碼),這是一種編碼文字的點格矩陣。 該影象可被你的手機攝像頭捕獲,並解釋為一個字串,比如URL, 這樣就免去了你在狹小的手機鍵盤上鍵入URL的麻煩。

以下為完整的程式,隨後有一段解釋。

package main

import (
    "flag"
    "html/template"
    "log"
    "net/http"
)

var addr = flag.String("addr", ":1718", "http service address") // Q=17, R=18

var templ = template.Must(template.New("qr").Parse(templateStr))

func main() {
    flag.Parse()
    http.Handle("/", http.HandlerFunc(QR))
    err := http.ListenAndServe(*addr, nil)
    if err != nil {
        log.Fatal("ListenAndServe:", err)
    }
}

func QR(w http.ResponseWriter, req *http.Request) {
    templ.Execute(w, req.FormValue("s"))
}

const templateStr = `
<html>
<head>
<title>QR Link Generator</title>
</head>
<body>
{{if .}}
<img src="http://chart.apis.google.com/chart?chs=300x300&cht=qr&choe=UTF-8&chl={{.}}" />
<br>
{{.}}
<br>
<br>
{{end}}
<form action="/" name=f method="GET"><input maxLength=1024 size=70
name=s value="" title="Text to QR Encode"><input type=submit
value="Show QR" name=qr>
</form>
</body>
</html>
`

main 之前的程式碼應該比較容易理解。我們通過一個標誌為伺服器設定了預設埠。 模板變數 templ 正式有趣的地方。它構建的HTML模版將會被伺服器執行並顯示在頁面中。 稍後我們將詳細討論。

main 函式解析了引數標誌並使用我們討論過的機制將 QR 函式繫結到伺服器的根路徑。然後呼叫 http.ListenAndServe 啟動伺服器;它將在伺服器執行時處於阻塞狀態。

QR 僅接受包含表單資料的請求,併為表單值 s 中的資料執行模板。

模板包 html/template 非常強大;該程式只是淺嘗輒止。 本質上,它通過在執行時將資料項中提取的元素(在這裡是表單值)傳給 templ.Execute 執行因而重寫了HTML文字。 在模板文字(templateStr

)中,雙大括號界定的文字表示模板的動作。 從 {{if .}} 到 {{end}} 的程式碼段僅在當前資料項(這裡是點 .)的值非空時才會執行。 也就是說,當字串為空時,此部分模板段會被忽略。

其中兩段 {{.}} 表示要將資料顯示在模板中 (即將查詢字串顯示在Web頁面上)。HTML模板包將自動對文字進行轉義, 因此文字的顯示是安全的。

餘下的模板字串只是頁面載入時將要顯示的HTML。如果這段解釋你無法理解,請參考 文件 獲得更多有關模板包的解釋。

你終於如願以償了:以幾行程式碼實現的,包含一些資料驅動的HTML文字的Web伺服器。 Go語言強大到能讓很多事情以短小精悍的方式解決。

編譯執行訪問

在Go的安裝目錄下的Src目錄下建立一個目錄,我的Go安裝在D盤,

所以我在D:\Go\src\目錄下建立了一個“web1”資料夾,新建了一個“web1.go”檔案,將上面的程式碼複製貼上到檔案中,儲存。

編譯

你可以通過在命令列視窗執行命令:go install web1 

來完成編譯,編譯完成後會在 D:\Go\bin 目錄下生成web1的exe。


執行

通過上面的方法編譯後,雙擊執行即可。

也可以在命令列下切換到檔案所在的目錄,例如:D:\Go\src\web1

然後執行:go run web1.go

結果如下圖:


點選允許訪問。

訪問


在文字框中輸入一個URL,如(http://blog.csdn.net/testcs_dn),點選Show QR,會生成一張二維碼的圖片


掃一掃這張二維碼看看吧


小結

與其它Web後端語言不同,Go語言需要自己編寫Web伺服器

這裡只是編譯執行一個簡單的例子,看看效果找找感覺。